对同一问题执行这两种解决方案有什么区别?
关闭方法
const numberIncrementer = startValue => () => startValue++
const getNextNumber = numberIncrementer(0)
console.log(getNextNumber())
// 0
console.log(getNextNumber())
// 1
console.log(getNextNumber())
// 2
生成器方法
const numberIncrementer = function*(startValue) {
while(true) {
yield startValue++
}
}
const numberFactory = numberIncrementer(0)
const getNextNumber = () => numberFactory.next().value
console.log(getNextNumber())
// 0
console.log(getNextNumber())
// 1
console.log(getNextNumber())
// 2
查看这两种方法,我有什么理由选择其中一种?
最佳答案
在下面的人为示例中,我转换了 Object
变成 Map
不依赖中间 Array
:
function* entries(o) {
for (let k in o) yield [k, o[k]];
}
const m = new Map(entries({foo: 1, bar: 2}))
console.log(
Array.from(m) // [["foo", 1], ["bar", 2]]
);
这不适用于闭包,因为您无法访问
for/in
的状态循环以在函数调用之间维护它。状态被封装在循环构造中。所以有些情况可以用生成器表示,但不能用闭包表示。
关于javascript - JavaScript 中的生成器和闭包有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46119777/