--- title: yield slug: Web/JavaScript/Reference/Operators/yield translation_of: Web/JavaScript/Reference/Operators/yield ---
{{jsSidebar("Operators")}}

La parola chiave yield è usata per mettere in pausa e far ripartire un generatore di funzione ({{jsxref("Statements/function*", "function*")}} or legacy generator function).

Sintassi

[rv] = yield [expression];
espressione
Definisce il valore da ritornare dalla funzione generatore attraverso the iterator protocol. Se omesso, undefined viene restituito.
rv
Permette che il generatore catturi il valore dell'espressione per usarlo al prossimo avvio dell'esecuzione.

Descrizione

The yield keyword causes generator function execution to pause and the value of the expression following the yield keyword is returned to the generator's caller. 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, the generator's code execution remains paused until the generator's next() method is called. Each time the generator's next() method is called, the generator resumes execution and runs until it reaches one of the following:

If an optional value is passed to the generator's next() method, that value becomes the value returned by the generator's next yield operation.

Between the generator's code path, its yield operators, and the ability to specify a new starting value by passing it to {{jsxref("Generator.prototype.next()")}}, generators offer enormous power and control.

Examples

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(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

Specifications

Specification Status Comment
{{SpecName('ES2015', '#', 'Yield')}} {{Spec2('ES2015')}} Initial definition.

Browser compatibility

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 39 {{CompatGeckoDesktop("26.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
IteratorResult object instead of throwing {{CompatUnknown}} {{CompatGeckoDesktop("29.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatGeckoMobile("26.0")}} {{CompatUnknown}} {{ CompatUnknown}} {{CompatUnknown}}
IteratorResult object instead of throwing {{CompatUnknown}} {{CompatGeckoMobile("29.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}

Firefox-specific notes

See also