首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们能用ES6生成器做什么,我们不能用for循环吗?

我们能用ES6生成器做什么,我们不能用for循环吗?
EN

Stack Overflow用户
提问于 2014-05-12 15:56:31
回答 1查看 1.1K关注 0票数 9

我走到了ES6的特点和发电机引起了我的注意。有一件事突然浮现在脑海中,那就是把许诺的东西链锁起来,这是我不能用循环做的。我们还能做些什么,这是我们以前做不到的?

我明白这是一个宽泛的问题,但我现在除了承诺什么都想不出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-12 16:31:55

通过使用yield,可以在函数的控制流中的任意点挂起生成器,从而保存当前的执行状态(范围和堆栈)。

没有发电机,这就更复杂了:

  • 您需要显式地跟踪状态。
  • 分支和(特别是)循环控制结构需要以函数方式表示,即递归编写。

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

代码语言:javascript
复制
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();
        }
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23613612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档