当我有一些代码需要执行多次时,我将其包装在一个函数中,这样我就不必重复自己。此外,有时还需要在页面加载时最初执行此代码。现在我这样做:
function foo() {
alert('hello');
}
foo();
我宁愿这样做:
(function foo() {
alert('hello');
})();
问题是,这只会在页面加载时执行,但如果我随后尝试使用 foo()
调用它,它将不起作用。
我猜这是一个作用域问题,但有什么方法可以让自执行函数在稍后被调用时工作?
最佳答案
如果您的函数不依赖于返回值,您可以这样做...
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;
请注意,该标识符仍将覆盖范围链中具有相同名称的标识符。 Nullifying 对此无济于事,并且无法删除局部变量,因此请明智地选择 NFE 名称。
关于javascript - 如何在 JavaScript 中调用自执行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890263/