Bu bir Jeneratör fonksiyonudur.
Jeneratörler çıkılabilen ve daha sonra tekrar girilebilen fonksiyonlardır. Bağlamları (değişken bağlamalar) tüm girişlerde kaydedilecektir.
Bir jeneratör fonksiyonunun çağrılması derhal vücudunu yürütmez; bunun yerine işlev için bir yineleyici nesnesi döndürülür. Yineleyicinext()
yöntemi çağrıldığında, üreteç işlevinin gövdesi, yield
yineleyiciden döndürülecek değeri belirten ilk ifadeye kadar veya yield*
başka bir üreteç işlevine temsilci atanıncaya kadar yürütülür .
Tarihsel not:
İçin önerilen bir sözdizimi EcmaScript.next
.
Mozilla'dan Dave Herman hakkında bir konuşma yaptı EcmaScript.next . 30: 15'te jeneratörlerden bahsediyor.
Daha önce, Mozilla'nın komiteyi yönlendirmek için önerilen dil değişikliklerini deneysel olarak nasıl uyguladığını açıklıyor. Dave, Mozilla'nın CTO'su Brendan Eich ve orijinal JavaScript tasarımcısı ile yakın bir şekilde çalışıyor.
EcmaScript çalışma grubu wiki'si hakkında daha fazla bilgi bulabilirsiniz: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Çalışma grubu (TC-39), EcmaScript.next dosyasının bir tür jeneratör yineleyici teklifine sahip olması gerektiği konusunda genel bir anlaşmaya sahiptir, ancak bu nihai değildir.
Dilin bir sonraki sürümünde değişiklik yapmadan bu gösterime güvenmemelisiniz ve değişmese bile, muhtemelen bir süre diğer tarayıcılarda yaygın olarak görünmeyecektir.
genel bakış
Askıya alınmış yürütme bağlamlarını (yani, işlev aktivasyonlarını) kapsayan nesneler olarak temsil edilen birinci sınıf couteinler. Önceki sanat: Python, İkon, Lua, Şema, Smalltalk.
Örnekler
Fibonacci sayılarının “sonsuz” dizisi (2 53 civarındaki davranışa rağmen ):
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Jeneratörler döngüler halinde tekrarlanabilir:
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
Jeneratörler yineleyicilerdir:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
function*
sözdizimi v26'dan beri Firefox'ta destekleniyor: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Eski sürümlerde farklı bir sözdizimi kullanılmıştır.