Javascript 函数自动运行 vs 仅在调用时运行

标签 javascript

<分区>

我正在编写一些代码,其中给定页面有许多与之关联的 .js 文件(像库一样使用它们)。每个 .js 文件内部看起来像这样:

(function() {
    .... all the lib functions and objects ....
})();

播放之后,我看到格式为 (function() {...})(); 的函数被自动调用。如果我去掉外层的括号以具有 function() {...} 那么代码是无效的。如果我添加一个函数名称,那么代码是有效的,但在调用 function foo() { ... } 之前不会运行。

这样写lib有什么特殊原因吗?我猜它会封装变量名等。允许它在页面加载时自动运行的语法是什么?

最佳答案

这叫做 IIFE,一个 Immediately-Invoked Function Expression .

它允许您定义变量(包括函数),这些变量在外部范围内是不可见的,并且不会占用全局 namespace 。

(function() {
    var v = ... // this variable can be used in the IIFE but not from outside
})();

之所以需要外括号,是因为以function something 开头的语句被解释为函数声明,这在这里是无效的,因为function declaration needs a name .您必须使用技巧才能使其成为表达式。括号可以做到这一点,但您可以使用其他技巧,例如

+function(){
  ...
}();

但外括号是最清晰的,也可能是最不令人惊讶的解决方案。

关于Javascript 函数自动运行 vs 仅在调用时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136293/

相关文章:

javascript - Nodejs多重认证

JavaScript onclick 重定向

javascript - 为多级 JSON 创建 Breeze 元数据

javascript - 我正在尝试在我的 Angular 应用程序中直接创建自己的自定义,以便我看到 ladda 加载指示器

javascript - 如何将列表项类别设置为事件导航栏

javascript - 更改按钮的文本值

javascript - 在 React 组件中测试 fetch() 方法

javascript - 如何获取 yandex map 上单击的地标的 ID?

javascript - 在 Javascript 函数 (ASP.net) 上使用句点的千位分隔符

javascript - 如何调试 "click"JavaScript 事件的处理程序未被调用的原因?