在JS中调用(0,func)()的目的是什么?

nat*_*ill 5 javascript

我在Babel这个源代码生成的代码中遇到了这个问题.它似乎在某种程度上保护了一个必需的功能.

(0, _utilities.validateNextState)(nextDomainState, reducerName, action);
Run Code Online (Sandbox Code Playgroud)

我理解括号中的逗号语句如何丢弃0并返回validateNextState函数,但为什么不这样做:

_utilities.validateNextState(nextDomainState, reducerName, action);
Run Code Online (Sandbox Code Playgroud)

我的猜测是一种保护(如闭包保护范围,或者setTimeout使函数调用异步),但无法弄清楚它的用途是什么.

Poi*_*nty 5

JavaScript 有时令人困惑的语义可能就是原因。表达方式

(0, _utilities.validateNextState)
Run Code Online (Sandbox Code Playgroud)

当然评估对该函数的引用。但是,由于它位于带括号的子表达式中,因此将在该子表达式之外进行函数调用,而不会将该对象_utilities识别为调用的上下文(this值)。因此,在validateNextState函数内部,this将是undefined全局对象的引用,具体取决于“严格”模式状态。

我怀疑 Babel 这样做是因为在原始源代码中,对它的调用validateNextState()就好像它是一个“裸”函数,而不是对象上的方法。Babel 不知道(可能)this该特定函数的值是否重要,但它必须确保它被安全地调用。