| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function* | [Back] [Original] |
Get to know MDN better
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value);
// : 10
console.log(gen.next().value);
// : 20
function* name(param0) {
statements
}
function* name(param0, param1) {
statements
}
function* name(param0, param1, /* , */ paramN) {
statements
}
:
function* GeneratorFunction Generator
next()throw()return() return throw yield yield*
yield next() yield value false done next() yield next() yield* next() next() return try...catch...finally return undefined next() value true done next() { value: undefined, done: true } throw next()next(){ value: undefined, done: true } throw() throw return() return try...catch...finally
function* function
function* idMaker() {
let index = 0;
while (true) {
yield index++;
}
}
const gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
//
function* anotherGenerator(i) {
yield i + 1;
yield i + 2;
yield i + 3;
}
function* generator(i) {
yield i;
yield* anotherGenerator(i);
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20
function* logGenerator() {
console.log(0);
console.log(1, yield);
console.log(2, yield);
console.log(3, yield);
}
const gen = logGenerator();
// next
// yield
gen.next(); // 0
gen.next("pretzel"); // 1 pretzel
gen.next("california"); // 2 california
gen.next("mayonnaise"); // 3 mayonnaise
function* yieldAndReturn() {
yield "Y";
return "R";
yield "unreachable";
}
const gen = yieldAndReturn();
console.log(gen.next()); // { value: "Y", done: false }
console.log(gen.next()); // { value: "R", done: true }
console.log(gen.next()); // { value: undefined, done: true }
const someObj = {
*generator() {
yield "a";
yield "b";
},
};
const gen = someObj.generator();
console.log(gen.next()); // { value: 'a', done: false }
console.log(gen.next()); // { value: 'b', done: false }
console.log(gen.next()); // { value: undefined, done: true }
class Foo {
*generator() {
yield 1;
yield 2;
yield 3;
}
}
const f = new Foo();
const gen = f.generator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
class Foo {
*[Symbol.iterator]() {
yield 1;
yield 2;
}
}
const SomeObj = {
*[Symbol.iterator]() {
yield "a";
yield "b";
},
};
console.log(Array.from(new Foo())); // [ 1, 2 ]
console.log(Array.from(SomeObj)); // [ 'a', 'b' ]
function* f() {}
const obj = new f(); // throws "TypeError: f is not a constructor
function* powers(n) {
//
for (let current = n; ; current *= n) {
yield current;
}
}
for (const power of powers(2)) {
//
if (power > 32) {
break;
}
console.log(power);
// 2
// 4
// 8
// 16
// 32
}
| ECMAScript 2027 LanguageSpecification # sec-generator-function-definitions |
GeneratorFunctionfunction* functionasync functionasync function*yieldyield*Generator| Web Proxy Viewer | New URL | Original Page |