Baseline Widely available
Сводкаfunction*
(клÑÑевое Ñлово function
Ñо звÑздоÑкой) опÑеделÑÐµÑ ÑÑнкÑиÑ-генеÑаÑоÑ.
function* name([param[, param[, ... param]]]) { statements }
name
ÐÐ¼Ñ ÑÑнкÑии.
param
ÐменованнÑе аÑгÑменÑÑ ÑÑнкÑии (паÑамеÑÑÑ). ФÑнкÑиÑ-генеÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ 255 аÑгÑменÑов.
statements
ÐнÑÑÑÑкÑии ÑоÑÑавлÑÑÑие Ñело ÑÑнкÑии.
ÐенеÑаÑоÑÑ ÑвлÑÑÑÑÑ ÑÑнкÑиÑми Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð²ÑÑ Ð¾Ð´Ð° и поÑледÑÑÑего Ð²Ñ Ð¾Ð´Ð°. ÐÑ ÐºÐ¾Ð½ÑекÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (знаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ ) ÑÐ¾Ñ ÑанÑеÑÑÑ Ð¿Ñи поÑледÑÑÑÐ¸Ñ Ð²Ñ Ð¾Ð´Ð°Ñ .
Ðогда вÑзÑваеÑÑÑ ÑÑнкÑиÑ-генеÑаÑоÑ, ÐµÑ Ñело иÑполнÑеÑÑÑ Ð½Ðµ ÑÑазÑ; вмеÑÑо ÑÑого возвÑаÑаеÑÑÑ Ð¾Ð±ÑекÑ-иÑеÑаÑоÑ. ÐÑи вÑзове меÑода next()
иÑеÑаÑоÑа Ñело ÑÑнкÑии-генеÑаÑоÑа иÑполнÑеÑÑÑ Ð´Ð¾ пеÑвого вÑÑÑеÑенного опеÑаÑоÑа yield
, коÑоÑÑй опÑеделÑÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение или делегиÑÑÐµÑ Ð´Ð°Ð»ÑнейÑее вÑполнение дÑÑÐ³Ð¾Ð¼Ñ Ð³ÐµÐ½ÐµÑаÑоÑÑ Ð¿Ñи помоÑи yield* anotherGenerator()
. ÐеÑод next()
возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ñо ÑвойÑÑвом value
, ÑодеÑжаÑим оÑданное знаÑение, и ÑвойÑÑвом done
, коÑоÑое ÑказÑваеÑ, ÑÑо генеÑаÑÐ¾Ñ Ñже оÑдал ÑÐ²Ð¾Ñ Ð¿Ð¾Ñледнее знаÑение. ÐÑзов меÑода next()
Ñ Ð°ÑгÑменÑом пÑекÑаÑÐ°ÐµÑ Ð²Ñполнение ÑÑнкÑии-генеÑаÑоÑа, и заменÑÐµÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ yield на коÑоÑой бÑло пÑиоÑÑановлено вÑполнение на аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÐµÑеданнÑй в next()
.
function* idMaker() {
var index = 0;
while (index < 3) yield index++;
}
var 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); // undefined
// ...
ÐÑÐ¸Ð¼ÐµÑ Ñ yield*
function* anotherGenerator(i) {
yield i + 1;
yield i + 2;
yield i + 3;
}
function* generator(i) {
yield i;
yield* anotherGenerator(i);
yield i + 10;
}
var 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(yield);
console.log(yield);
console.log(yield);
}
var gen = logGenerator();
// пеÑвÑй вÑзов next вÑполнÑеÑÑÑ Ð¾Ñ Ð½Ð°Ñала ÑÑнкÑии
// и до пеÑвого опеÑаÑоÑа yield
gen.next();
gen.next("pretzel"); // pretzel
gen.next("california"); // california
gen.next("mayonnaise"); // mayonnaise
ÐнÑÑÑÑкÑÐ¸Ñ return в генеÑаÑоÑе
function* yieldAndReturn() {
yield "Y";
return "R";
yield "unreachable";
}
var 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 }
ÐенеÑаÑоÑÑ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð¸Ð½ÑÑанÑиÑÐ¾Ð²Ð°Ð½Ñ (not constructable)
function* f() {}
var obj = new f(); // throws "TypeError: f is not a constructor"
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4