好玩到炸裂,共享下
window.num=1
var obj={num:4,
dbl: (function(){
this.num*=2;
return function(){
this.num*=2;
}
})()
}
var dbl=obj.dbl; 》》位置1
dbl(); 》》位置2
obj.dbl(); 》》位置3
解析:红色标记部分是一个立即执行函数,执行到它位置的时候,就执行。
它内部有一个闭包,还嵌套着一个闭包。 里面的this具有全局性,都指向window.num。
执行位置1的时候,window.num =2,返回一个函数function(){ this.num*=2;}。
执行位置2的时候 window.num = 4
<=等价于=>
var obj={
num:4,dbl: (function(){
window.num*=2;
return function(){
window.num*=2;
}
})()
}
var dbl=obj.dbl; 》》位置1
window.dbl(); 》》位置2
obj.dbl(); 》》位置3
============================================================================
重点执行位置3的时候。因为立即函数已经使用过,所以dbl发生了改变;
var obj={
num:4,dbl: function(){
this.num*=2;
}
})()
}
此时执行obj.dbl(); 操作的就是obj的num,所以obj.num == 8;
console.log(window.num+obj.num);==>console.log(4+8);//12