anonymous javascript function call !function vs function
怎么会
1
| function(){ alert("test123");}() |
产生SyntaxError: Unexpected token (
而
1
| !function(){ alert("test123");}() |
提醒"test123"
?
-
benalman.com/news/2010/11/…
-
@zerkms你应该把它作为答案发布,因为它实际上很好地解释了事情的核心。
-
来吧,必须有重复......
-
@Kippie:这里不欢迎仅链接答案:-)
-
@zerkms什么是重报?
-
为了更多的乐趣。 必须在表达式中计算的任何内容也会执行此操作:-function(){}(),+function(){}(),0|function(){}()等
-
最邪恶的必须是0?0:function(){}()
这是因为通过添加!符号,您可以将声明转换为表达式并立即调用它。
通过将函数括在括号中,您将使第一个示例正常工作而不会出现错误:
1
| (function(){ alert("test123");})() |
为了使它更清晰,您可以将第一个表达式视为:
1
| if (false || !function(){ return false; }()) |
正如@zerkms注意到有一个完整的立即调用函数的解释。
-
太糟糕了我无法写出正确的答案,但......"标识符"不是正确的术语。 相反,区别在于定义和表达。 前者无法立即调用。
-
正确但错误的解释。 的! 将声明转换为表达式。
-
我可以定义一个函数而不是调用它:!function(){alert("will not be called")}
-
@slebetman谢谢。 更新。