JavaScript 中的 yield 关键字是什么?
我听说过JavaScript中的“yield”关键字,但我发现关于它的文档非常糟糕。有人可以解释我(或推荐一个解释)它的用法和用途的网站吗?
我听说过JavaScript中的“yield”关键字,但我发现关于它的文档非常糟糕。有人可以解释我(或推荐一个解释)它的用法和用途的网站吗?
迟到的答案,可能现在每个人都知道,但是出现了一些更好的文档。yield
将 James Long 的“Javascript's Future: Generators”中的一个例子改编为官方 Harmony 标准:
function * foo(x) {
while (true) {
x = x * 2;
yield x;
}
}
“当你调用foo时,你会得到一个生成器对象,它有一个下一个方法。
var g = foo(2);
g.next(); // -> 4
g.next(); // -> 8
g.next(); // -> 16
所以有点像:你得到一些东西回来。 返回 的值,但返回一个函数,该函数为您提供了一个迭代到下一个值的方法。如果您有一个可能占用大量内存的过程,并且可能希望在迭代期间中断,则该过程非常有用。yield
return
return x
x
yield x
这真的很简单,这就是它的工作原理
yield
关键字只是帮助在任何时间异步暂停和恢复函数。以这个简单的生成器函数为例:
function* process() {
console.log('Start process 1');
console.log('Pause process2 until call next()');
yield;
console.log('Resumed process2');
console.log('Pause process3 until call next()');
let parms = yield {age: 12};
console.log("Passed by final process next(90): " + parms);
console.log('Resumed process3');
console.log('End of the process function');
}
设 _process = process();
在你调用_process.next()之前,它不会执行前2行代码,然后第一个收益将暂停函数。要恢复函数直到下一个暂停点(yield 关键字),您需要调用_process.next()。
您可以认为多个收益是单个函数中 javascript 调试器中的断点。在您告诉导航下一个断点之前,它不会执行代码块。(注意:不阻挡整个应用程序)
但是,当 yield 执行此暂停和恢复行为时,它也可以根据上一个函数返回一些结果,我们没有发出任何值。如果我们浏览前面的输出,它将在未定义的值下显示相同的值。{value: any, done: boolean}
{ value: undefined, done: false }
让我们深入了解收益关键字。(可选)您可以添加表达式并设置分配默认可选值。(官方文档语法)
[rv] = yield [expression];
表达式:从生成器函数返回的值
yield any;
yield {age: 12};
rv:返回传递给生成器的 next() 方法的可选值
简单地说,您可以使用此机制将参数传递给process()函数,以执行不同的产量部分。
let val = yield 99;
_process.next(10);
now the val will be 10
用法
引用: