2015-02-24 62 views
-1

我刚接手一看underscore.js source code,当我把衣服脱了源代码,其裸含IIFE它看起来像这样:是否为underscore.js IIFE语法有效?

(function() { 

}.call(this)); 

我一直使用外括号(function() {}).call(this);的语法和想知道这句法是也有效和普遍?

+0

是的这个语法是正确的:) – 2015-02-24 12:50:11

+1

为什么外部圆括号会出错? – 2015-02-24 12:51:05

+0

@FrédéricHamidi我期待着需要外在的假设,所以匿名函数可以被看作是一个表达式,例如'(function(){})。call(this)'或'+ function(){} .call(this)'。但是为什么'(function(){} .call(this))'执行但函数(){} .call(this)'不? – 2015-02-24 12:56:41

回答

2

如果您特别询问外部)的位置,那么无论它位于紧接在大括号之后还是在整个表达式doesn't matter for the most part之后。无论哪种方式都不会影响IIFE的执行方式。

这里唯一的区别是.call(this),它是作为函数表达式的成员调用的 - 典型的IIFE在紧接大括号后面紧跟着内部圆括号。使用.call(this)的原因在许多其他答案中有详细说明,包括this one

+0

但函数(){} .call (this)'不能被执行,我通过'+ function(){} .call(this)'知道这个技巧'但是为什么要将它封装在paranthesis中会改变内部表达式的执行方式? – 2015-02-24 12:53:38

+3

@Nick Russler:用括号括起来或用'+'来表示它是一个函数表达式,而不是函数声明。 – BoltClock 2015-02-24 12:54:55

+0

所以这只是一个语法的东西。对我来说,封装paranthesis可能会改变内部代码的执行方式似乎很奇怪。 – 2015-03-04 12:47:17