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;。
我不知道他们为什么会有不同的结果。
答案 0 :(得分:5)
这是一个bug in Babel。复杂参数列表中的表达式不应该能够在函数体中看到声明,但Babel生成的代码会在函数范围内计算默认参数,其中内部foo
是可见的。