【问题标题】:Is the underscore.js IIFE syntax valid? [duplicate]underscore.js IIFE 语法是否有效? [复制]
【发布时间】:2015-04-26 02:26:57
【问题描述】:

我刚刚查看了underscore.js source code,当我将源代码剥离到包含 IIFE 的裸露时,它看起来像这样:

(function() {

}.call(this));

我一直使用带外括号(function() {}).call(this); 的语法,想知道这种语法是否也有效且常见?

【问题讨论】:

  • 是的,这个语法是正确的:)
  • 为什么外括号会出错?
  • @FrédéricHamidi 我期待需要外部括号,因此可以将匿名函数视为表达式,例如(function() {}).call(this)+function() {}.call(this)。但是为什么(function() {}.call(this)) 执行而function() {}.call(this) 不执行呢?
  • 查看副本,了解此构造的作用。如果您只是在寻找括号语法,请参阅Location of parenthesis for auto-executing anonymous JavaScript functions?

标签: javascript syntax underscore.js


【解决方案1】:

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

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

【讨论】:

  • 但是function() {}.call(this) 无法执行,我通过+function() {}.call(this) 知道诀窍,但是为什么将它包装在括号内会改变内部表达式的执行方式?
  • @Nick Russler:将其包裹在括号内或+ing 告诉解析器这是一个函数表达式,而不是函数声明。
  • 所以这只是一个语法问题。在我看来,括起来的括号可能会改变内部代码的执行方式。
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2014-02-20
  • 2012-12-01
  • 2013-02-19
相关资源
最近更新 更多