功能默认参数有些问题?

时间:2017-05-28 06:01:09

标签: javascript web ecmascript-6

见这个

let foo = 'outer';

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

bar(); //outer

我想知道为什么输出是'外部'而不是“内心”。我知道JavaScript有词法范围。这个输出让我觉得函数x => foo是在函数bar

之外定义的

1 个答案:

答案 0 :(得分:0)

  

我知道js有词法范围,这个输出让我觉得函数x => foo是在函数bar之外定义的

不完全是。它位于:参数声明中,它有自己的作用域,可以访问其他参数但不能访问正文。默认初始值设定项basically desugars to

let foo = 'outer';
function bar() {
  var func = arguments[0] === undefined ? x => foo : arguments[0];
  {
    let foo = 'inner';
    console.log(func());
  }
}
bar(); // outer