ちょっと調べたのでメモ。
スプレッド関数とか配列に変換する場合、最初に一気に呼ばれる。for(x of iterator)
の場合は逐次呼ばれる。
Iteration protocols - JavaScript | MDN
以下をchromeのconsoleで実行する。
itr = {
[Symbol.iterator]: () => ({
i: 1,
next: function(){
console.log(this.i)
return { value: this.i, done: this.i++ > 10 }
}
})
}
Array.from(itr).forEach(i => console.log('for-each')) // 1
for(j of itr){console.log('for')} // 2
1の場合、最初に数字がバッと出て後でfor-each
とまとめて出る。
2の場合、数字とfor
が交合に出る。
1の方が今風って感じですが、2の方が安全。中間操作とかないし。当たり前のことを確認してしまった感もあります。
まぁこれでStreamみたいな事ができるかも。