2016-04-27 7 views
1

ジェネレータを反復このコードES6

let func = function *(){ 
    for (let i = 1; i < 5; i++) { 
     yield i; 
    } 
} 
let s = func().next(); 
console.log(s); 
let s2 = func().next(); 
console.log(s2); 

戻り

Object {value: 1, done: false} 
Object {value: 1, done: false} 

ので、基本的にFUNC収率最初の値のすべての時間。

しかし、私は

let f = func(); 
let s = f.next(); 
console.log(s); 
let s2 = f.next(); 
console.log(s2); 

に変更したときに期待どおりに動作します。 funcを変数に代入するのはなぜこのような違いがありますか?

+0

'ので、 func()!== func() '? – Bergi

+0

動作が異なる場合、すべてのジェネレータ機能は* once *のみ使用できます。 –

答えて

3

最初のコードでは、常に新しいジェネレータインスタンスを作成しています。私はこれをより明確に示すために、別々の変数にそれらのインスタンスを割り当てた:

2番目のスニペットでは、あなたが(変数 fに譲渡された)同じジェネレータを反復し続けるのに対し
// first generator instance 
let g = func(); 
// first call to next on the first instance 
let s = g.next(); 
console.log(s); 
// second generator instance 
let g2 = func(); 
// first call to next on the second instance 
let s2 = g2.next(); 
console.log(s2); 

let f = func(); 
// first call to next 
let s = f.next(); 
console.log(s); 
// second call to next 
let s2 = f.next(); 
console.log(s2); 
関連する問題