兩種方法我已經看到了(我知道有更多的)使用IIFE的:IIFE調用
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
是否有任何理由對第一個使用.call(this)
? ();
不會在函數中產生相同的上下文嗎?
兩種方法我已經看到了(我知道有更多的)使用IIFE的:IIFE調用
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
是否有任何理由對第一個使用.call(this)
? ();
不會在函數中產生相同的上下文嗎?
這取決於代碼的執行位置。
.call(this)
明確將this
設置爲您傳遞給.call
的對象。只有使用();
纔會將this
設置爲window
(或在嚴格模式下設置爲undefined
)。
如果代碼在全局範圍內執行,它將是相同的。如果不是,那麼如果this
不是指window
(或者是undefined
),那麼您將得到不同的結果。
實施例:
var obj = {
foo: function() {
(function(){
console.log(this); // this === obj
}).call(this); // this === obj
(function(){
console.log(this); // this === window
})();
}
};
obj.foo();
相關:[爲什麼使用javascript函數包裝「.CALL(這)」](http://stackoverflow.com/q/4542942/1048572) – Bergi