【问题标题】:anonymous javascript function call !function vs function [duplicate]匿名javascript函数调用!函数与函数[重复]
【发布时间】:2013-08-29 21:31:01
【问题描述】:

怎么会

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

产生SyntaxError: Unexpected token (

同时

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

警报“test123”

?

【问题讨论】:

  • @zerkms 您可能应该将其发布为答案,因为它实际上很好地解释了问题的核心。
  • 来吧,那里必须是重复的...
  • @Kippie:这里不欢迎仅链接的答案 :-)
  • @zerkms 重引用呢?

标签: javascript


【解决方案1】:

这是因为通过添加! 符号,您将声明转换为表达式并立即调用它。 通过将函数括在括号中,您将使第一个示例正常工作:

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

为了更清楚,您可以将第一个表达式视为:

if (false || !function(){ return false; }())


正如@zerkms 注意到的那样,Immediately-invoking functions 有一个完整的解释。

【讨论】:

  • 太糟糕了,我无法写出正确的答案,但是......“标识符”不是正确的术语。相反,区别在于定义和表达式。前者不能立即调用。
  • 正确但解释错误。这 !将声明转换为表达式。
  • 我可以定义一个函数并调用它:!function(){alert("will not be called")}
  • @slebetman 谢谢。已更新。
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 2014-09-11
  • 2013-11-22
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2013-04-16
  • 2013-12-18
相关资源
最近更新 更多