如果功能不依賴於一個返回值,你可以這樣做......
var foo = (function bar() {
alert('hello');
return bar;
})(); // hello
foo(); // hello
這在命名的函數表達式使用本地參考bar
給函數返回外foo
變量。
或者,即使是這樣,你可以使返回值條件...
var foo = (function bar() {
alert('hello');
return foo ? "some other value" : bar;
})(); // hello
alert(foo()); // hello --- some other value
或只是手動分配給變量,而不是返回...
var foo;
(function bar() {
alert('hello');
foo = bar;
})(); // hello
foo(); // hello
正如@RobG所述,IE的某些版本會將標識符泄漏到封閉變量範圍中。該標識符將引用您創建的功能的副本。爲了使您的NFE IE安全(r),您可以取消該引用。
bar = null;
請注意,標識符仍然會在作用域鏈上覆蓋同名標識符。清除不會有幫助,並且局部變量不能被刪除,所以明智地選擇NFE名稱。
我不知道這是否是做的最好的方式。我想這會在一段時間後變得非常混亂。 – Hassan
http://stackoverflow.com/questions/6211466/call-immediately-executing-function-from-outside的可能重複。 – apsillers
也可能重複http://stackoverflow.com/questions/6404196/can-i-name-a-javascript-function-and-execute-it-immediately(它有更好的答案,恕我直言,但問題的措辭不是完全匹配。) – apsillers