Baseline Widely available
yield
å
³é®åç¨äºæå忢å¤çæå¨å½æ°ã
function* foo(index) {
while (index < 2) {
yield index;
index++;
}
}
const iterator = foo(0);
console.log(iterator.next().value);
// Expected output: 0
console.log(iterator.next().value);
// Expected output: 1
è¯æ³
[rv] = yield [expression];
expression
å®ä¹éè¿è¿ä»£å¨åè®®ä»çæå¨å½æ°è¿åçå¼ã妿çç¥ï¼åè¿å undefined
ã
rv
è¿åä¼ éç»çæå¨ç next()
æ¹æ³çå¯éå¼ï¼ä»¥æ¢å¤å
¶æ§è¡ã
yield
å
³é®å使çæå¨å½æ°æ§è¡æåï¼yield
å
³é®ååé¢ç表达å¼çå¼è¿åç»çæå¨çè°ç¨è
ãå®å¯ä»¥è¢«è®¤ä¸ºæ¯ä¸ä¸ªåºäºçæå¨ççæ¬ç return
å
³é®åã
yield
å
³é®åå®é
è¿åä¸ä¸ª IteratorResult
对象ï¼å®æä¸¤ä¸ªå±æ§ï¼value
å done
ãvalue
屿§æ¯å¯¹ yield
è¡¨è¾¾å¼æ±å¼çç»æï¼è done
æ¯ false
ï¼è¡¨ç¤ºçæå¨å½æ°å°æªå®å
¨å®æã
䏿¦éå° yield
表达å¼ï¼çæå¨ç代ç å°è¢«æåè¿è¡ï¼ç´å°çæå¨ç next()
æ¹æ³è¢«è°ç¨ãæ¯æ¬¡è°ç¨çæå¨ç next()
æ¹æ³æ¶ï¼çæå¨é½ä¼æ¢å¤æ§è¡ï¼ç´å°è¾¾å°ä»¥ä¸æä¸ªå¼ï¼
yield
ï¼å¯¼è´çæå¨å次æåå¹¶è¿åçæå¨çæ°å¼ãä¸ä¸æ¬¡è°ç¨ next()
æ¶ï¼å¨ yield
ä¹åç´§æ¥ççè¯å¥ç»§ç»æ§è¡ãthrow
ç¨äºä»çæå¨ä¸æåºå¼å¸¸ãè¿è®©çæå¨å®å
¨åæ¢æ§è¡ï¼å¹¶å¨è°ç¨è
ä¸ç»§ç»æ§è¡ï¼æ£å¦é常æ
åµä¸æåºå¼å¸¸ä¸æ ·ãIteratorResult
ç»è°ç¨è
è¿å value
ç弿¯ undefined
å¹¶ä¸ done
为 true
ãreturn
è¯å¥ãå¨è¿ç§æ
åµä¸ï¼çæå¨çæ§è¡ç»æï¼å¹¶å° IteratorResult
è¿åç»è°ç¨è
ï¼å
¶ value
ç弿¯ç± return
è¯å¥æå®çï¼å¹¶ä¸ done
为 true
ã妿å°åæ°ä¼ éç»çæå¨ç next()
æ¹æ³ï¼å该å¼å°æä¸ºçæå¨å½å yield
æä½è¿åçå¼ã
å¨çæå¨ç代ç è·¯å¾ä¸ç yield
è¿ç®ç¬¦ï¼ä»¥åéè¿å°å
¶ä¼ éç» Generator.prototype.next()
æå®æ°çèµ·å§å¼çè½åä¹é´ï¼çæå¨æä¾äºå¼ºå¤§çæ§å¶åã
è¦åï¼ ä¸å¹¸å°æ¯ï¼next()
æ¯ä¸å¯¹ç§°çï¼ä½è¿å¹¶ä¸æ¯æ²¡æå¸®å©ï¼å®æ»æ¯åå½åæåç yield
åéä¸ä¸ªå¼ï¼ä½æ¯è¿åçæ¯ yield
ä¹å表达å¼çè¿ç®ç»æã
以ä¸ä»£ç æ¯ä¸ä¸ªçæå¨å½æ°ç声æã
function* countAppleSales() {
const saleList = [3, 7, 5];
for (let i = 0; i < saleList.length; i++) {
yield saleList[i];
}
}
䏿¦çæå¨å½æ°å·²å®ä¹ï¼å¯ä»¥éè¿æé ä¸ä¸ªè¿ä»£å¨æ¥ä½¿ç¨å®ã
const 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 }
ä½ ä¹å¯ä»¥å°å¸¦æ next(value)
çå¼åéç»çæå¨ãå¨ rv = yield expression
è¿ä¸ªè¯æ³ä¸ï¼step
ç¨äºæ¥æ¶è¿åå¼ââå°½ç®¡ç¬¬ä¸æ¬¡è°ç¨ next()
æ¶å¿½ç¥ä¼ éç»çæå¨ next()
æ¹æ³çå¼ã
function* counter(value) {
let step;
while (true) {
step = yield value++;
if (step) {
value += step;
}
}
}
const generatorFunc = counter(0);
console.log(generatorFunc.next().value); // 0
console.log(generatorFunc.next().value); // 1
console.log(generatorFunc.next().value); // 2
console.log(generatorFunc.next().value); // 3
console.log(generatorFunc.next(10).value); // 14
console.log(generatorFunc.next().value); // 15
console.log(generatorFunc.next(10).value); // 26
è§è æµè§å¨å
¼å®¹æ§ åè§
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