在尝试了解如何使用 KoaJS 时,我开始意识到yield* undefined
babel 和 traceur 之间的行为不同。Babel 似乎忽略了该语句,而 traceur 抛出了异常。可以在此处查看示例:Babel - Traceur或以下:
function* gen() {
console.log('will \'yield 1\'');
yield 1;
console.log('will \'yield undefined\'');
yield undefined;
console.log('will \'yield* undefined\'');
yield* undefined;
console.log('will \'yield 2\'');
yield 2;
}
let y = gen();
while(true) {
try {
let r = y.next();
console.log(JSON.stringify(r));
if(r.done)
break;
}
catch(e) {
console.log();
console.log(e);
console.log();
};
}
我尝试在规范中查找它并且只得到更多的混乱,因为规范yield
看起来不像yield undefined
应该返回{done: false}
(无值属性),但这就是在两个转译器中发生的事情(也在上面的示例中)。至于yield*
,我没有找到为什么 traceur 应该抛出的答案。我还没有用 v8 (node/iojs) 尝试这个。
所以问题是,在这两种情况下正确/预期的行为是什么?