0

我正在尝试在 Node.js 中实现生成器。我遇到了node-fibernode-lazy。Node-lazy 处理数组和流,但本质上不会生成惰性事物(数字除外)。

虽然使用 Fiber 看起来更干净,但它也有其缺点,因此,我更喜欢带有闭包的纯 Javascript,因为它更明确。我的问题是:使用闭包生成迭代器是否存在内存或性能问题

例如,只要调用者要求,我就尝试以深度优先方式遍历树。我想首先找到'waldo'并停止。

纤维:

var depthFirst = Fiber(function iterate(tree) {
    tree.children.forEach(iterate);
    Fiber.yield(tree.value);
});

var tree = ...;
depthFirst.run(tree);
while (true) {
    if (depthFirst.run() === 'waldo')
        console.log('Found waldo');
}

带有闭包的纯 JavaScript:

function iterate(tree) {
    var childIndex = 0;
    var childIter = null;
    var returned = false;
    return function() {
        if (!childIter && childIndex < tree.children.length)
            childIter = iterate(tree.children[childIndex++]);

        var result = null;
        if (childIter && (result = childIter()))
            return result;

        if (!returned) {
            returned = true;
            return tree.value;
        }
    };
}

var tree = ...;
var iter = iterate(tree);
while (true) {
    if (iter() === 'waldo')
        console.log('found waldo');
}
4

0 回答 0