为什么此摘录中的函数定义被解释为函数表达式

时间:2013-07-15 14:18:16

标签: javascript function function-expression

我正在从here了解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

0 个答案:

没有答案