没有逗号的收益数组

Jay*_*Lim 3 javascript generator ecmascript-6

我正在研究javascript ES6的生成器.

当我试图理解我的书的一个例子时,我遇到了麻烦,因为下面的代码中没有逗号数组.

这段代码是如何工作的?

[代码]

let gen = function*(){
    return [yield yield]; // how this code line works?
}
let genObj = gen();
console.log(genObj.next());
console.log(genObj.next(10));
console.log(genObj.next(20));
Run Code Online (Sandbox Code Playgroud)

[运行结果]

Object {value: undefined, done: false}
Object {value: 10, done: false}
Object {value: Array[1], done: true}
Run Code Online (Sandbox Code Playgroud)

[测试 - 1]

let gen = function*(){
    return ['a' 'b'];
}
// Uncaught SyntaxError: Unexpected string
Run Code Online (Sandbox Code Playgroud)

[测试 - 2]

let a = [yield yield]

// Uncaught SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)

Pat*_*rts 6

我只想专注于你的第一个例子:

return [yield yield];
Run Code Online (Sandbox Code Playgroud)

这条线从右到左.最右边的yield发送valueundefined到的主叫迭代器(这是genObj是-迭代器).在你调用的行上genObj.next(10),你将10进入函数gen()并在最右边恢复执行yield,就好像yield变为10:

return [yield 10];
Run Code Online (Sandbox Code Playgroud)

现在控制台记录了,10因为那是value你的下一个yield.然后你传入,20所以函数恢复,就好像:

return [20];
Run Code Online (Sandbox Code Playgroud)

所以value记录的最后一个返回length === 1值是一个包含值的数组20.