所以...ES6¹(几个小时前恰好标准化)为类似于PHP,Python等的函数带来了默认参数.我可以这样做:
function foo (bar = 'dum') {
    return bar;
}
foo(1); // 1
foo(); // 'dum'
foo(undefined); // 'dum'
Run Code Online (Sandbox Code Playgroud)
MDN表示在调用时评估参数的默认值.这意味着每次调用该函数时,'dum'都会再次计算表达式(除非实现执行一些我们不关心的奇怪的优化).
我的问题是,如何this发挥作用?
let x = {
  foo (bar = this.foo) {
    return bar;
  }
}
let y = {
  z: x.foo
}
x.foo() === y.z(); // what?
Run Code Online (Sandbox Code Playgroud)
babel转换器目前评估它为false,但我不明白.如果他们真的在通话时评估,那么:
let x = 'x from global';
function bar (thing = x) {
  return thing;
}
function foo () {
  let x = 'x from foo'; …Run Code Online (Sandbox Code Playgroud)