我將一個函數作爲參數傳遞給一個IIFE中的構造函數。我意識到一個IIFE的外部函數將被執行,但它似乎也執行了函數參數。我不明白爲什麼,想知道如何解決這個問題。這裏有兩個例子:JavaScript中的IIFE是遞歸的嗎?
var Foo = function(bar) {
this.bar = bar;
};
new Foo(function() { console.log("test"); });
在上面的例子中,事情工作正如我所料。匿名函數作爲參數傳遞給Foo構造函數,但未運行。
這裏是另外一個例子,它看起來是一個IIFE內創建執行一個匿名函數,即使它沒有明確提出:
(function() {
var Foo = function(bar) {
this.bar = bar;
};
Foo.STATIC_FIELD = new Foo(new function() { console.log("test"); });
return Foo;
})();
在第二個例子中,「測試」被寫入安慰。我正在使用IIFE來保護全球名稱空間免受Foo污染。但是,我不希望傳遞給Foo構造函數的函數立即執行。這是我保留的函數,以便稍後可以使用Foo.STATIC_FIELD.bar();來調用它。達到此目的的最佳方式是什麼?
您在第二個示例中使用'new'調用匿名函數。刪除'新',你會成爲金。 –
我將此標記爲錯字,因爲我認爲它是一個。否則,這是一個寫得很好的問題。 – DavidS
其實我也打算在第一個例子中使用新的。但你是對的。我想我的直覺是我必須用新來創造一些東西。但是在這種情況下,你不用new創建一個函數,你使用new運行一個函數。有點奇怪「新myFunction」與「myFunction()」有什麼相同之處。 –