--- title: yield slug: Web/JavaScript/Reference/Operators/yield translation_of: Web/JavaScript/Reference/Operators/yield ---
Keyword yield
digunakan untuk menghentikan sementara dan melanjutkan sebuah fungsi generator ({{jsxref("Statements/function*", "function*")}} atau legacy generator function).
[rv] = yield [expression];
expression
undefined
akan dikembalikan.rv
Mengembalikan nilai opsional yang diberikan pada generator method next()
untuk melanjutkan eksekusinya.
Keyword yield
menghentikan secara sementara eksekusi dari fungsi generator dan nilai setelah keyword yield
dikembalikan pada pemanggil generator tersebut. yield
bisa juga disebut sebagai versi generator dari keywordreturn
.
Keyword yield
sebenarnya mengembalikan sebuah obyek IteratorResult
dengan dua properti, value
dan done
. Propertivalue
adalah hasi dari evaluasi ekspresi yield
, dan done
yang false
, mengindikasikan bahwa fungsi generator tersebut belum selesai sepenuhnya.
Sekali berhenti pada ekspresi yield
, eksekusi dari code generator tersebut akan terus dihentikan sampai generator method next()
dipanggil. Setiap kali method generator next()
dipanggil, generator melanjutkan eksekusi dan berjalan hingga mencapai salah satu dari kondisi berikut ini :
yield
, yang menyebabkan generator sekali lagi berhenti sementara dan mengembalikan nilai baru dari generator tersebut. Ketika kemudiannext()
dipanggil lagi, eksekusi berlanjut dengan statement segera setelahyield
.IteratorResult
dikembalikan pada pemanggilnya dimana value
adalah {{jsxref("undefined")}} dan done
adalah true
.IteratorResult
dikembalikan pada pemanggil dimana value
ditentukan oleh statement return
dan done
adalah true
.JIka sebuah nilai opsional diberikan pada generator method next()
, nilai tersebut menjadi nilai yang dikembalikan oleh operasi yield
dari generator pada saat itu.
Di antara kode generator, operatoryield
-nya, dan kemampuan untuk menentukan sebua nilai awal baru dengan memberikannya pada {{jsxref("Generator.prototype.next()")}}, generator menawarkan power dan kontrol yang luar biasa.
Kode berikut merupakan deklarasi dari sebuah contoh fungsi generator.
function* countAppleSales () { var saleList = [3, 7, 5]; for (var i = 0; i < saleList.length; i++) { yield saleList[i]; } }
Setelah sebuah fungsi generator didefenisikan, maka fungsi tersebut dapat digunakan untuk menghasilkan sebuah iterator seperti berikut.
var appleStore = countAppleSales(); // Generator { } console.log(appleStore.next()); // { value: 3, done: false } console.log(appleStore.next()); // { value: 7, done: false } console.log(appleStore.next()); // { value: 5, done: false } console.log(appleStore.next()); // { value: undefined, done: true }
Spesifikasi | Status | Komentar |
---|---|---|
{{SpecName('ES2015', '#', 'Yield')}} | {{Spec2('ES2015')}} | Initial definition. |
{{SpecName('ESDraft', '#', 'Yield')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.operators.yield")}}
IteratorResult
object like { value: undefined, done: true }
({{bug(958951)}}).yield
expression has been updated to conform with the ES2015 specification ({{bug(981599)}}):
yield
keyword is optional and omitting it no longer throws a {{jsxref("SyntaxError")}}: function* countAppleSales() { yield; }