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)
我只想专注于你的第一个例子:
return [yield yield];
Run Code Online (Sandbox Code Playgroud)
这条线从右到左.最右边的yield发送value的undefined到的主叫迭代器(这是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.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |