我正在尝试在 Node.js 中实现生成器。我遇到了node-fiber和node-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');
}