Mozilla wants to hear from developers like you.


この翻訳は不完全です。英語から この記事を翻訳 してください。

yield キーワードはジェネレータ関数の一時停止と再開で利用します。(function* または legacy generator function).


[[rv =]] yield [[expression]];
the iterator protocol 経由で取得したジェネレータ関数を定義します。もし省略した場合、 undefined が戻ってきます。
When the generator function is resumed by calling the generator's next() method, the optional value supplied to next() becomes the return value of the yield expression in the generator.


The yield keyword causes generator function execution to pause and return the value of the expression following the yield keyword. It can be thought of as a generator-based version of the return keyword.

The yield keyword actually returns an IteratorResult object with two properties, value and done. The value property is the result of evaluating the yield expression, and done is a Boolean indicating whether or not the generator function has fully completed.

Once paused on a yield expression, code execution for the generator cannot resume unless invoked externally by calling the generator's next() method. This allows direct control of the generator's execution and incremental return values.


The following code is the declaration of an example generator function, along with a helper function.

function* foo(){
  var index = 0;
  while (index <= 2) // when index reaches 3, 
                     // yield's done will be true 
                     // and its value will be undefined;
    yield index++;

Once a generator function is defined, it can be used by constructing an iterator as shown.

var iterator = foo();
console.log(; // { value: 0, done: false }
console.log(; // { value: 1, done: false }
console.log(; // { value: 2, done: false }
console.log(; // { value: undefined, done: true }


Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Yield' in that specification.
Standard Initial definition.

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 39 26.0 (26.0) ? ? ?
IteratorResult object instead of throwing ? 29.0 (29.0) ? ? ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support yes (when?) 26.0 (26.0) ? ? ?
IteratorResult object instead of throwing ? 29.0 (29.0) ? ? ?

Firefox-specific notes

  • Starting with Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), the completed generator function no longer throws a TypeError "generator has already finished". Instead, it returns an IteratorResult object like { value: undefined, done: true } (バグ 958951).
  • Starting with Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30), the parsing of the yield expression has been updated to conform with the latest ES6 specification (バグ 981599):
    • The expression after the yield keyword is optional and omitting it no longer throws a SyntaxError: function* foo() { yield; }

See also


 このページの貢献者: mantaroh, teoli, ethertank
 最終更新者: mantaroh,