Saw*_*oes 3 javascript closures generator ecmascript-6
对同一问题使用这两种解决方案有什么区别?
const numberIncrementer = startValue => () => startValue++
const getNextNumber = numberIncrementer(0)
console.log(getNextNumber())
// 0
console.log(getNextNumber())
// 1
console.log(getNextNumber())
// 2
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
查看这两种方法,我为什么要选择一种方法呢?
小智 5
在以下人为设计的示例中,我不依赖中间体将Objecta 转换为a :MapArray
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]]
);Run Code Online (Sandbox Code Playgroud)
这对于闭包不起作用,因为您无法访问for/in循环状态以在函数调用之间维护它。状态被封装在循环构造中。因此,有些情况可以用生成器来表达,而不能用闭包来表达。
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |