这在JavaScript中是什么?

这在JavaScript中是什么?,javascript,ecmascript-6,babeljs,Javascript,Ecmascript 6,Babeljs,我还不知道该怎么称呼这个问题。当有人告诉我我在看什么的时候我会更新它 我在看一些编译代码(来自Babel),它产生了以下结果: (0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)() 怎么回事!?经过一些挖掘,看起来你可以使用任意数量的参数,但它总是只关心最后一个。这个语法叫什么,它是什么意思,它有什么用处 编译它的原始代码是: shouldShowTippingOnCheckoutFlow() 您可以阅读以下内容: 逗号运算符计算每个操作数

我还不知道该怎么称呼这个问题。当有人告诉我我在看什么的时候我会更新它

我在看一些编译代码(来自Babel),它产生了以下结果:

(0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)()
怎么回事!?经过一些挖掘,看起来你可以使用任意数量的参数,但它总是只关心最后一个。这个语法叫什么,它是什么意思,它有什么用处

编译它的原始代码是:

shouldShowTippingOnCheckoutFlow()
您可以阅读以下内容:

逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值

例子 产生与以下相同的结果:

++x
(0,…)符号会发生什么 两者之间的区别:

_posSaleTipJs.shouldShowTippingOnCheckoutFlow()
以及:

被调用函数将获得不同的
this

在第一种情况下,
将是_posSaleTipJs的同义词,而在第二种情况下,
将保持全局对象(或者在严格模式下,
未定义
,请参见巴贝尔插件)

第二个效果是逗号运算符返回(在本例中)函数引用的结果,但该函数引用已丢失其原始上下文

以下ES6 arrow函数和立即调用具有相同的效果:

((func) => func())(_posSaleTipJs.shouldShowTippingOnCheckoutFlow);
但是,尽管如此,
(0,…)()
符号似乎是调用函数的最简洁的方式,同时保持
这个
全局或
未定义
您可以阅读以下内容:

逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值

例子 产生与以下相同的结果:

++x
(0,…)符号会发生什么 两者之间的区别:

_posSaleTipJs.shouldShowTippingOnCheckoutFlow()
以及:

被调用函数将获得不同的
this

在第一种情况下,
将是_posSaleTipJs的同义词,而在第二种情况下,
将保持全局对象(或者在严格模式下,
未定义
,请参见巴贝尔插件)

第二个效果是逗号运算符返回(在本例中)函数引用的结果,但该函数引用已丢失其原始上下文

以下ES6 arrow函数和立即调用具有相同的效果:

((func) => func())(_posSaleTipJs.shouldShowTippingOnCheckoutFlow);

但是,
(0,…)()
符号似乎是调用函数的最简洁的方式,同时保持
这个
全局或
未定义的
代码的第一部分

(0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)
返回
\u posSaleTipJs.shouldShowTippingOnCheckoutFlow
的值。返回值显然是一个函数。在返回的函数中使用括号
()

(0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)()
你实际上调用了这个函数。因此,它会调用函数
shouldShowTippingOnCheckoutFlow

编译器生成此类代码的原因可能有几个:

  • 缩小
  • 性能优化
  • 范围隔离

我需要看更多的代码来说明编译对您的案例有何帮助。

代码的第一部分

(0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)
返回
\u posSaleTipJs.shouldShowTippingOnCheckoutFlow
的值。返回值显然是一个函数。在返回的函数中使用括号
()

(0, _posSaleTipJs.shouldShowTippingOnCheckoutFlow)()
你实际上调用了这个函数。因此,它会调用函数
shouldShowTippingOnCheckoutFlow

编译器生成此类代码的原因可能有几个:

  • 缩小
  • 性能优化
  • 范围隔离

我需要查看代码的更大部分,才能说明编译对您的情况有何帮助。

我无法理解在提供的示例OP中逗号运算符的用法。为什么不直接调用
\u posSaleTipJs.shouldShowTippingOnCheckoutFlow()
。有什么想法吗?原始调用没有基对象(“上下文”),因此结果是相同的,都是在初始设置为未定义的情况下调用的,它在函数内部的设置(即未定义或全局对象)分别取决于代码是否严格。True,尽管我们无法从问题中知道,在调用之前,这个
应该是什么(在原始代码中)。我假设巴贝尔遵循这种模式,即使在某些情况下可能没有必要。感谢您的解释,但由于我们可以使用
\u posSaleTipJs。应该显示tippingoncheckoutflow。出于同样的目的应用(此)
,我想知道使用逗号运算符是否对性能有一些好处?我认为它可能对性能有一点好处:从直觉上看,调用apply似乎比应用
运算符更重。但实际上,由于现代JavaScript解析器中的所有这些智能优化,很难说。
表示法的字符数也稍微短一些。我无法理解在提供的示例OP中逗号运算符的用法。为什么不直接调用
\u posSaleTipJs.shouldShowTippingOnCheckoutFlow()
。有什么想法吗?原始调用没有基对象(“上下文”),因此结果是相同的,都是在初始设置为未定义的情况下调用的,它在函数内部的设置(即未定义或全局对象)分别取决于代码是否严格。True,尽管我们无法从问题中知道,在调用之前,这个
应该是什么(在原始代码中)。我假设巴贝尔遵循这种模式,即使在某些情况下可能没有必要。感谢您的解释,但由于我们可以使用
\u posSaleTipJs。应该显示tippingoncheckoutflow。出于同样的目的应用(此)
,我想知道使用逗号运算符是否对性能有一些好处?我认为它可能对性能有一点好处:从直觉上看,调用apply似乎比应用
运算符更重。但真的,和艾尔