小编use*_*110的帖子

`this`如何在默认参数中工作?

所以...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)

javascript default-parameters ecmascript-6

11
推荐指数
1
解决办法
247
查看次数