为什么ES6代码和ES5代码在Babel.js编译后有不同的结果?

时间:2016-07-21 02:11:01

标签: javascript ecmascript-6 babeljs

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

结果是&#34;外部&#34;。

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

1 个答案:

答案 0 :(得分:5)

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