为什么babel用_(0,...)()包装_sourceMapSupport.install()?

时间:2015-10-19 21:43:58

标签: javascript babeljs

我注意到babel已编译

import { install } from 'source-map-support';
install();

var _sourceMapSupport = require('source-map-support');
(0, _sourceMapSupport.install)();

为什么babel使用带0的逗号运算符作为调用install函数的第一个表达式?

1 个答案:

答案 0 :(得分:4)

逗号在What does a comma do in JavaScript expressions?中解释。基本上,它会计算所有表达式,并返回最后一个表达式返回的值。

使用它的原因可能是能够将方法称为不是方法。

考虑这个功能:

function f() { return this; }

让我们把它变成一种方法:

var o = {f: f}

然后,虽然f === o.f,但结果会因您调用它而异:

o.f(); // o
f();   // global object (in non-strict mode)
f();   // undefined (in strict mode)

因此,babel使用逗号方法获取对函数的引用,而不将其与对象关联。通过这种方式,可以将该方法称为全局函数,而不是一个。

(0, o.f)(); // global object (in non-strict mode)
(0, o.f)(); // undefined (in strict mode)