Ben this article about javascript generators okuyordu ve ben şu pasajı ulaştı:Bu yineleyici aşağıdaki değerleri neden veriyor?
function *foo(x) {
var y = 2 * (yield (x + 1));
var z = yield (y/3);
return (x + y + z);
}
var it = foo(5);
// note: not sending anything into `next()` here
console.log(it.next()); // { value:6, done:false }
console.log(it.next(12)); // { value:8, done:false }
console.log(it.next(13)); // { value:42, done:true }
İlk it.next()
amacını anlamıyorum. Bunu gerçekleştirdikten sonra, bu satır, yineleyici var z = yield (y/3)
'da duraklatılmalı, y değeri 6 değerine sahip olmalıdır? it.next(12)
, yield (y/3)
için param sağlamaz ve bundan sonra 4 olabilir mi? Fonksiyonun neden 5 + 12 + 4 olmadığını anlamıyorum. Her nasılsa ilk it.next()
göz ardı ediliyormuş gibi. Bu dava mı? Birisi biraz ışık tutabilir mi?
bunu doğru anladınız mı yardımcı olabilir? Temel olarak, ilk 'it.next()' i çağırdıktan sonra, arayan kişiye 6 döndürülür ve düğüm aynı işlevi elde etmek için işlevi askıya alır mı? Bu yüzden, '' x (x) yerine 12, x + 1 yerine 'it.next (12) 'yi çağırırken, doğru mu? – Geo
@Geo: Tam olarak nasıl 'verim' çalışıyor, evet :-) Çoğu durumda (yineleyiciler gibi), iletilen değerler hakkında hiçbir şey umursamıyorsunuz (veya hiçbir değer iletilmiyor), ancak Bununla bazı süslü şeyler. Sorunuza bağladığınız makale dizisini okumaya devam edin! – Bergi