【问题标题】:Why the ES6 code and ES5 code has diffent result after compiling by Babel.js?为什么 ES6 代码和 ES5 代码经过 Babel.js 编译后的结果不同?
【发布时间】:2016-07-21 02:11:01
【问题描述】:

ES6 代码:

let foo = 'outer';

function bar(func = x => foo){
    let foo = 'inner';
    console.log(func());
}
bar(); // outer

结果是“外部”。

Babel.js 编译的 ES5 代码:

'use strict';

var foo = 'outer';

function bar() {
    var func = arguments.length <= 0 || arguments[0] === undefined ? function (x) {
        return foo;
    } : arguments[0];

    var foo = 'inner';
    console.log(func());
}
bar(); // inner

结果是“外部”。

我不知道为什么他们有不同的结果。

【问题讨论】:

    标签: javascript ecmascript-6 babeljs


    【解决方案1】:

    这是一个bug in Babel。复杂参数列表中的表达式应该看不到函数体中的声明,但是这里 Babel 生成的代码会计算函数范围内的默认参数,其中内部的foo 是可见的。

    【讨论】:

    • 是否有可能已经创建了一个问题,或者您是否热衷于创建一个?在任何一种情况下,如果您使用一个链接更新您的答案将会很有帮助。
    • 添加了链接。 (最初跳过它是因为 babel 的 bugtracker 非常糟糕。)有趣的是,bug 中的代码正是这个问题中的代码,所以我担心我错过了这个问题的重点。
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2015-08-22
    • 2018-01-21
    • 1970-01-01
    • 2021-05-28
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多