javascript 自执行函数 - 不同的语法

标签 javascript syntax

<分区>

我见过 2 个版本的自执行 javascript 函数:

(function() { ... })()

(function() { ... }())

注意函数执行“()”的不同位置

这两者有区别吗?

最佳答案

有很多方法可以使您所做的事情产生效果,严格来说,这个主题与闭包主题只有切线关系。

问题是这样的:在 JavaScript 中,function 关键字有两个不同的目的:

  1. 它引入了一个函数声明语句,它有点像一个var语句(变量声明),但它是针对函数的;
  2. 它在较大表达式的上下文中引入了一个函数文字表达式。

现在的问题是,当解析器在语句的开头看到 function 时,它假定您要声明一个函数;也就是上面的案例1。当你声明一个函数时,你不能在同一条语句中调用它;函数声明语句只是声明函数。

因此,如果您想要的语句包含函数的创建及其立即调用,则必须让解析器准备好解析表达式。将整个内容放在括号中只是这样做的一种方式。

任何让解析器相信它所看到的是表达式语句的“技巧”都可以:

var dummy = function() { ... whatever ... } ();

!function() { ... whatever ... } ();

0 + function() { ... whatever ... } ();

所有这些以及无数其他示例都设置了这样的设置,即当解析器看到 function 关键字时,它会在表达式中间执行此操作。

如果 Eich 先生为函数对象中间表达式的实例化选择了不同的关键字(例如 lambda),那就没问题了,因为你可以这样说

lambda () { ... whatever ... } ();

然而,他没有。

关于javascript 自执行函数 - 不同的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407639/

相关文章:

输入 MYSQL 命令但我不明白响应

javascript - 两个对象数组正在合并,但它们没有排序 - D3

javascript - 如何居中 Dijit Select 小部件?

javascript - 排序表时如何在span元素上触发

javascript - JS 对象导航——什么时候使用 object.sub 和 object ["sub"]?

c# - '+='的含义

generics - 在别名中使用特征作为类型参数的语法

javascript - 如果键的值未定义,如何不以对象文字表示法设置键

javascript - 尝试实现一个简单的幻灯片放映 - 行不通

Mysql: #1064 存储过程错误