【问题标题】:Why does babel wrap _sourceMapSupport.install() with (0, ...)()? [duplicate]为什么 babel 用 (0, ...)() 包装 _sourceMapSupport.install()? [复制]
【发布时间】:2016-01-18 09:24:42
【问题描述】:

我注意到 babel 已转译

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

进入

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

为什么babelinstall 函数的调用中使用逗号运算符和0 作为第一个表达式?

【问题讨论】:

  • @Oriol 公平地说,OP 也在问为什么 babel 会这样做。
  • @Oriol royhowie 是对的。我已经编辑了我的问题,请删除重复标记。
  • 是的,对不起。我已经重新打开并解释了原因。
  • 最后其实是重复的,只是我选错了XD

标签: javascript babeljs


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多