2
同じ問題を解決する2つの方法の違いは何ですか?JavaScriptのジェネレータとクロージャの違いは何ですか?
閉鎖方法
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
これらの2つの方法を見て、どのような理由私は他の上で1つを選択する必要がありますか?
私は中間Array
に頼らず
Map
に
Object
を変換し、次の不自然な例で
文法はまったく異なりますか?そして、無限ループよりも少し複雑なことをしようとしてください... – Bergi
多くのAPIに重複があります。この例では、実際には違いは表示されません。特に、クロージャがジェネレータによって作成されているように見えるからです。主な相違点は非同期フローです。 '.next()'メソッドは 'getNextNumber'関数にハードコードされていますが、おそらくもっと適切にその関数の外にあるので、' async'作業の後に 'next()'を呼び出してデータを返すことができます。しかし、私はこのすべてについて間違っている可能性があります... – Pytth
可能な複製https://stackoverflow.com/q/45093404/1048572またはhttps://stackoverflow.com/q/23613612/1048572 – Bergi