gpt4 book ai didi

javascript - 了解 javascript 中的 'Yield' 关键字?

转载 作者:行者123 更新时间:2023-11-29 19:53:19 25 4
gpt4 key购买 nike

我今天在 javascript 中遇到了 yield 关键字,我知道目前它在没有升级 ECMA 6 的浏览器中不受支持。同时在 firefox 中,我如何在没有 yield

的情况下重写以下代码
if (currentNode) {
yield currentNode;
currentNode = null;
}

最佳答案

没有直接的等价物。但是,可以通过返回一个“生成器”对象来伪造它。基本上,延续代码 被移动到生成器的 next() 中。

考虑这个 fib-generator example on MDN :

function fib() {
var i = 0, j = 1;
while (true) {
yield i;
var t = i;
i = j;
j += t;
}
}

var g = fib();
for (var i = 0; i < 10; i++) {
console.log(g.next());
}

并使用假生成器重写:

function fib() {
var i = 0, j = 1;
return {
'next': function () {
var yieldRet = i;
// These haven't occurred before the `yield` in the above generator,
// but it makes it easier to do it in the same order here.
// Just make sure there are no OBSERVABLE side-effects.
var t = i;
i = j;
j += t;
return yieldRet;
}
};
}

var g = fib();
for (var i = 0; i < 10; i++) {
console.log(g.next());
}

现在,由于添加了可观察的可变状态,这确实变得有点棘手了;给定的示例仍然可以表示为状态机。请注意,每个 next 都可以“推进”状态。

var currentNode;
function yield1 () {
var y = { next: st0 };
return y;
function st0 () {
if (currentNode) {
y.next = st1;
return currentNode;
} else {
y.next = stZ;
}
}
function st1 () {
y.next = stZ;
currentNode = null; // observable side-effect!
}
function stZ () {
}
}

var g = yield1();
currentNode = "x";
console.log(g.next()); // "x"
console.log(currentNode); // still "x"
g.next();
console.log(currentNode); // null

关于javascript - 了解 javascript 中的 'Yield' 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com