匿名JavaScript函数调用!function与function

5
为什么
function(){ alert("test123");}()

产生了SyntaxError: Unexpected token (错误。

!function(){ alert("test123");}()

警告 "test123"


4
这是一篇介绍立即调用函数表达式(Immediately Invoked Function Expression,IIFE)的技术文章。IIFE 是一种 JavaScript 函数,可以在定义后立即执行,并且不会将变量泄露到全局作用域。该文章详细解释了 IIFE 的语法、用途和使用方法,并提供了一些示例来说明其实际应用。 - zerkms
1
肯定有重复的... - John Dvorak
1
@Kippie:这里不欢迎仅包含链接的回答 :-) - zerkms
@zerkms 重度引用怎么办? - John Dvorak
为了更有趣。在表达式中必须求值的任何内容都可以这样实现:-function(){}(), +function(){}(),0|function(){}() 等。 - slebetman
显示剩余2条评论
1个回答

3

这是因为你加上了!符号,将声明转换为表达式并立即调用它。 通过将函数包含在括号中,您可以使第一个示例无错误运行:

(function(){ alert("test123");})()

为了让它更清晰,你可以把第一个表达式想象成这样的东西:
if (false || !function(){ return false; }())


正如@zerkms所指出的那样,这里有一个完整的立即执行函数表达式的解释。


太遗憾了,我无法写出一个恰当的答案,但是,“标识符”不是正确的术语。相反,区别在于定义和表达式。前者不能立即调用。 - John Dvorak
1
正确的轨迹但错误的解释。!将声明转换为表达式。 - slebetman
我可以定义一个函数并且 不会 调用它:!function(){alert("will not be called")} - John Dvorak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接