即時調用的函數表達式(IIFE)中的this
和var
之間是否有區別?IIFE:var vs this - 有什麼區別嗎?
(function(){
var foo = 0;
this.bar = 0;
})();
即時調用的函數表達式(IIFE)中的this
和var
之間是否有區別?IIFE:var vs this - 有什麼區別嗎?
(function(){
var foo = 0;
this.bar = 0;
})();
如果你的代碼是在全球範圍內執行,那麼兩個選項:
你在use strict
模式,在這種情況下,this
點什麼(null或undefined),然後你會看到一個例外。
您在use strict
模式不是,然後this
指向窗口,在這種情況下,您將設置bar
作爲一個全局變量。
var
保持並不會被暴露在IIFE的外線電話的局部變量(它在運行相同的範圍內)。
當然有。
foo
是IIFEbar
內作用域一個變量將針對任何this
在執行上下文結合進行評估。var
是一個局部範圍的變量。也就是說,它不會在IIFE之外提供。
另一方面,this.bar
將屬性添加到當前對象。你的情況是window
。
var MyModule = (function(exports){
var foo = 0;
exports.bar = 0;
return exports;
})(MyModule || {});
上面的代碼是一個簡單的實現模塊模式的:
如果你想變量,函數或任何成員導出到其它範圍,我會建議以下解決方案。
在另一方面,如果要定義什麼this
的IIFE裏面,你可以使用call
調用它:
// You don't need "exports" anymore
// since "this" works the same way
var MyModule = (function(){
var foo = 0;
this.bar = 0;
return this;
}).call(MyModule || {});
在這一天結束的this
價值取決於如何一個函數被調用。如果您沒有提供this
與call
,bind
或apply
的含義,則取決於函數的調用方式。例如,如果一個函數是一個對象的一部分,那麼this
會是誰擁有該函數的對象:this`設置全局變量
var obj = {
doStuff: function() {
// "this" is "obj" by default
}
};
','var'地方。檢查'console.log(這個===窗口)'。 – dfsq
http://stackoverflow.com/questions/11285975/difference-between-var-and-this-in-javascript-functions可能的重複 –