我正在编写一些代码,其中给定页面有许多与之关联的 .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(){
...
}();
但外括号是最清晰的,也可能是最不令人惊讶的解决方案。