如果你的函数不依赖于返回值,你可以这样做......
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 名称。