<分区>
我见过 2 个版本的自执行 javascript 函数:
(function() { ... })()
和
(function() { ... }())
注意函数执行“()”的不同位置
这两者有区别吗?
标签 javascript syntax
<分区>
我见过 2 个版本的自执行 javascript 函数:
(function() { ... })()
和
(function() { ... }())
注意函数执行“()”的不同位置
这两者有区别吗?
最佳答案
有很多方法可以使您所做的事情产生效果,严格来说,这个主题与闭包主题只有切线关系。
问题是这样的:在 JavaScript 中,function
关键字有两个不同的目的:
var
语句(变量声明),但它是针对函数的;现在的问题是,当解析器在语句的开头看到 function
时,它假定您要声明一个函数;也就是上面的案例1。当你声明一个函数时,你不能在同一条语句中调用它;函数声明语句只是声明函数。
因此,如果您想要的语句仅包含函数的创建及其立即调用,则必须让解析器准备好解析表达式。将整个内容放在括号中只是这样做的一种方式。
任何让解析器相信它所看到的是表达式语句的“技巧”都可以:
var dummy = function() { ... whatever ... } ();
!function() { ... whatever ... } ();
0 + function() { ... whatever ... } ();
所有这些以及无数其他示例都设置了这样的设置,即当解析器看到 function
关键字时,它会在表达式中间执行此操作。
如果 Eich 先生为函数对象中间表达式的实例化选择了不同的关键字(例如 lambda),那就没问题了,因为你可以这样说
lambda () { ... whatever ... } ();
然而,他没有。
关于javascript 自执行函数 - 不同的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407639/