Javascript 计算默认参数时ECMAScript 6异常

Javascript 计算默认参数时ECMAScript 6异常,javascript,ecmascript-6,babeljs,Javascript,Ecmascript 6,Babeljs,考虑以下代码: class Test { constructor() { this.a = 1; } method1() { throw new Error(); } method2(b = this.method1()) { return new Promise((resolve) => { console.log(this); // logs undefined resolve(this.a); });

考虑以下代码:

class Test {
  constructor() {
    this.a = 1;
  }

  method1() {
    throw new Error();
  }

  method2(b = this.method1()) {
    return new Promise((resolve) => {
      console.log(this);  // logs undefined
      resolve(this.a);
    });
  }
}

const t = new Test();
t.method2()
.then((r) => {
   console.log('result', r);
})
.catch((e) => {
   console.log('error', e);
});
请注意
method1
(用作
method2
的默认参数)如何引发异常


使用传输此代码时,
console.log(this)
显示
变为
未定义
,但不会引发异常。这是标准行为(如果是,背后的原因是什么)还是Babel中的bug?

在我看来,抛出了一个错误,只是Babel已经准备好了捕获它的代码。Chrome在这一行中断:
if(error)throw error(巴别塔代码的一部分),其中
错误
在测试中被报告为
错误。方法1(eval at…
在JSFIDLE中-该方法再次抛出一个错误,并且您没有看到控制台日志。您看到了什么不同的东西吗?如果是,您在哪里以及如何执行传输的代码?@JamesThorpe我在一个应用程序中有一个类似的代码,当尝试在我有
conso的行上访问此属性时失败le.log
无法访问未定义的属性foo
)。似乎您在其他地方的代码与您在此处简化的代码不完全相同,那么这就是您在Babel回复中的问题的确切代码。请注意控制台中的
Uncaught Error:method1
。这是正确的。您应该返回您的应用程序,尝试找出该代码与您在此处的代码之间的差异