javascript - 如何在 JavaScript 中调用自执行函数?

标签 javascript

当我有一些代码需要执行多次时,我将其包装在一个函数中,这样我就不必重复自己。此外,有时还需要在页面加载时最初执行此代码。现在我这样做:

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/

相关文章:

javascript - 无法读取未定义的属性 'findAll'

javascript - Phonegap 重启加速度计

javascript - jQuery 触发点击不起作用

javascript - 隐藏其类与单击的按钮不匹配的 div 的按钮菜单

javascript - 在加载时进行 jquery keyup 计算的最有效方法

javascript - 如何使scrollIntoView()在第一次点击时起作用(Angular 6)?

javascript - 根据浏览器性能添加效果

javascript - 当 ng-click 不可用时在悬停时显示禁止图标

javascript - 使用 Bootstrap 按钮验证错误

javascript - React js将分组列数组转换为普通数组