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