我刚接手一看underscore.js source code,当我把衣服脱了源代码,其裸含IIFE它看起来像这样:是否为underscore.js IIFE语法有效?
(function() {
}.call(this));
我一直使用外括号(function() {}).call(this);
的语法和想知道这句法是也有效和普遍?
我刚接手一看underscore.js source code,当我把衣服脱了源代码,其裸含IIFE它看起来像这样:是否为underscore.js IIFE语法有效?
(function() {
}.call(this));
我一直使用外括号(function() {}).call(this);
的语法和想知道这句法是也有效和普遍?
如果您特别询问外部)
的位置,那么无论它位于紧接在大括号之后还是在整个表达式doesn't matter for the most part之后。无论哪种方式都不会影响IIFE的执行方式。
这里唯一的区别是.call(this)
,它是作为函数表达式的成员调用的 - 典型的IIFE在紧接大括号后面紧跟着内部圆括号。使用.call(this)
的原因在许多其他答案中有详细说明,包括this one。
但函数(){} .call (this)'不能被执行,我通过'+ function(){} .call(this)'知道这个技巧'但是为什么要将它封装在paranthesis中会改变内部表达式的执行方式? – 2015-02-24 12:53:38
@Nick Russler:用括号括起来或用'+'来表示它是一个函数表达式,而不是函数声明。 – BoltClock 2015-02-24 12:54:55
所以这只是一个语法的东西。对我来说,封装paranthesis可能会改变内部代码的执行方式似乎很奇怪。 – 2015-03-04 12:47:17
是的这个语法是正确的:) – 2015-02-24 12:50:11
为什么外部圆括号会出错? – 2015-02-24 12:51:05
@FrédéricHamidi我期待着需要外在的假设,所以匿名函数可以被看作是一个表达式,例如'(function(){})。call(this)'或'+ function(){} .call(this)'。但是为什么'(function(){} .call(this))'执行但函数(){} .call(this)'不? – 2015-02-24 12:56:41