Javascript 不带逗号的产量数组

Javascript 不带逗号的产量数组,javascript,ecmascript-6,generator,Javascript,Ecmascript 6,Generator,我正在学习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

我正在学习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));
Object {value: undefined, done: false}
Object {value: 10, done: false}
Object {value: Array[1], done: true}
let gen = function*(){
    return ['a' 'b'];
}
// Uncaught SyntaxError: Unexpected string
let a = [yield yield]

// Uncaught SyntaxError: Unexpected identifier
[运行结果]

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));
Object {value: undefined, done: false}
Object {value: 10, done: false}
Object {value: Array[1], done: true}
let gen = function*(){
    return ['a' 'b'];
}
// Uncaught SyntaxError: Unexpected string
let a = [yield yield]

// Uncaught SyntaxError: Unexpected identifier
[测试-1]

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));
Object {value: undefined, done: false}
Object {value: 10, done: false}
Object {value: Array[1], done: true}
let gen = function*(){
    return ['a' 'b'];
}
// Uncaught SyntaxError: Unexpected string
let a = [yield yield]

// Uncaught SyntaxError: Unexpected identifier
[测试-2]

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));
Object {value: undefined, done: false}
Object {value: 10, done: false}
Object {value: Array[1], done: true}
let gen = function*(){
    return ['a' 'b'];
}
// Uncaught SyntaxError: Unexpected string
let a = [yield yield]

// Uncaught SyntaxError: Unexpected identifier

我只想集中谈谈你回答这个问题的第一个例子:

return [yield yield];
这条线从右到左。最右边的
yield
未定义的
发送给的调用方(这就是
genObj
是一个迭代器)。在调用
genObj.next(10)
的行中,您将
10
传递到函数
gen()
,并在最右边的
yield
处恢复其执行,就好像
yield
变为
10

return [yield 10];
现在控制台将记录
10
,因为这是下一个
的收益
。然后您传入
20
,因此实际上该功能会恢复,就像:

return [20];

因此,记录的最后一个返回值
是一个
长度===1
的数组,其中包含值
20

您的代码等价于以下内容:

let gen=function*(){
设x=收益率;
设y=x;
返回[y];
}
设genObj=gen();
log(genObj.next());
console.log(genObj.next(10));
console.log(genObj.next(20))