gpt4 book ai didi

javascript - 我们可以用 ES6 Generator 做哪些不能用 for 循环做的事情?

转载 作者:搜寻专家 更新时间:2023-11-01 04:40:48 26 4
gpt4 key购买 nike

我了解了 ES6 的特性,Generators 引起了我的注意。突然想到的一件事是链接 Promise 对象,这是我无法用循环实现的。我们还能做哪些以前做不到的其他机制?

我知道这是一个宽泛的问题,但目前我仍然想不出除了 Promises 之外的任何东西。

最佳答案

通过使用 yield,生成器可以在函数控制流中的任何点暂停,从而保存当前的执行状态(作用域和堆栈)。

没有生成器,这就更复杂了:

  • 你需要明确地跟踪状态
  • 分支和(尤其是)循环控制结构需要以函数式方式表示,即递归编写。

生成器通常可用于遍历数据结构,创建一个简单的类似流的迭代器,按顺序生成所有元素。想一想树遍历,或图中的 DFS/BFS 作为简单示例。

function* traverseTree(node) {
if (node == null) return;
yield* traverseTree(node.left);
yield node.value;
yield* traverseTree(node.right);
}

// vs (not sure):
function traverseTree(node) {
var rl, l, r;
return {
next: function() {
if (node == null && !r) return {done:true};
if (!l) l = traverseTree(node.left);
if (!(rl=l.next()).done)
return rl;
if (node != null) {
var n = {value:node.value};
node = null;
r = traverseTree(node.right);
return n;
}
return r.next();
}
}
}

关于javascript - 我们可以用 ES6 Generator 做哪些不能用 for 循环做的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335871/

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