0

我正在从这里学习 JavaScript 立即调用函数表达式 (IIFE) 。

在这个 Ben 很好地解释了为什么直接调用函数不起作用:

function(){ /* code */ }(); // SyntaxError: Unexpected token (
                            //since when the parser encounters the function keyword in     
                            //the global scope or inside a function, it treats it as a 
                            // function declaration (statement), and not as a function
                            // expression

所以我们只需要确保解析器将其解释为函数表达式而不是函数声明。

显而易见的方法是立即调用函数 - 将函数定义放在括号中(并因此强制解析器将其解释为函数表达式),然后再次将括号放在后面

(function(){ /* code */ })();   //or
(function(){ /* code */ }());

然而,作者解释了其他需要表达式的地方,这会强制将函数定义解释为函数表达式而不是声明:

var i = function(){ return 10; }();
true && function(){ /* code */ }();
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();

但是我不明白为什么下面的函数定义被强制解释为表达式:

0, function(){ /* code */ }(); 

所以下面实际上调用了该函数:

0, function () { document.write("<h1>Hello World!!</h1> <br />") }(); //Hello World!!

工作的JSFiddle

4

0 回答 0