Baseline Widely available
Generator
å®ä¾ç return()
æ¹æ³çä½ç¨å°±å¥½åä¸ä¸ª return
è¯å¥è¢«æå
¥å°çæå¨ä¸»ä½çå½åæåä½ç½®ï¼è¿ä¼ç»æçæå¨å¹¶å
许çæå¨ä¸ try...finally
åç»åä½¿ç¨æ¶æ§è¡ä»»ä½æ¸
çä»»å¡ã
generatorInstance.return()
generatorInstance.return(value)
åæ°
value
å¯é
è¦è¿åçå¼ã
ä¸ä¸ª Object
ï¼æä»¥ä¸ä¸¤ä¸ªå±æ§ï¼
done
ä¸ä¸ªå¸å°å¼ï¼
true
ãfalse
ãåªæå¨ try...finally
ä¸æè· return
å¹¶ä¸ finally
åä¸è¿ææ´å¤ç yield
è¡¨è¾¾å¼æ¶æä¼åçè¿ç§æ
åµãvalue
ç»å®çä½ä¸ºåæ°çå¼ï¼æè
ï¼å¦æ yield
表达å¼å
å«å¨ try...finally
ï¼ä» finally
å产ç/è¿åçå¼ã
return()
æ¹æ³å¨è¢«è°ç¨æ¶ï¼å¯ä»¥ç使¯å¨çæå¨ä¸»ä½å½åæåçä½ç½®æå
¥äºä¸ä¸ª return value;
è¯å¥ï¼å
¶ä¸ value
æ¯ä¼ å
¥ç» return()
æ¹æ³çå¼ãå æ¤ï¼å¨å
¸åçæµç¨ä¸ï¼è°ç¨ return(value)
å°è¿å {done: true, value: value }
ãç¶èï¼å¦æ yield
表达å¼è¢«å
å«å¨ try...finally
åä¸ï¼æ§å¶æµä¸ä¼éåºå½æ°ä½ï¼èæ¯è¿å
¥ finally
åãå¨è¿ç§æ
åµä¸ï¼å¦æ finally
å䏿æ´å¤ yield
表达å¼ï¼è¿åçå¼å¯è½ä¼ä¸åï¼done
çè³å¯è½æ¯ false
ã
以ä¸ä¾åå±ç¤ºäºä¸ä¸ªç®åççæå¨å return
æ¹æ³ç使ç¨ã
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen();
g.next(); // { value: 1, done: false }
g.return("foo"); // { value: "foo", done: true }
g.next(); // { value: undefined, done: true }
妿坹已ç»å¤äºâ宿âç¶æççæå¨è°ç¨ return(value)
ï¼åçæå¨å°ä¿æå¨â宿âç¶æã
å¦ææ²¡ææä¾åæ°ï¼åè¿å对象ç value
å°ä¸º undefined
ã妿æä¾äºåæ°ï¼ååæ°å°è¢«è®¾ç½®ä¸ºè¿å对象ç value
屿§çå¼ï¼é¤é yield
表达å¼è¢«å
è£
å¨ try...finally
ä¸ã
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen();
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
g.return(); // { value: undefined, done: true }
g.return(1); // { value: 1, done: true }
å° return() ä¸ try...finally ä¸èµ·ä½¿ç¨
妿 yield
表达å¼è¢«å
å«å¨ä¸ä¸ª try...finally
åä¸ï¼åªæçæå¨æ¬èº«æè½ç¥é return
æ¹æ³å·²è¢«è°ç¨ã
å½å¨ try
å䏿åççæå¨ä¸è°ç¨ return
æ¹æ³æ¶ï¼çæå¨ä¸çæ§è¡å°ç»§ç»å° finally
åââå 为 try...finally
è¯å¥ç finally
åå§ç»æ§è¡ã
function* gen() {
yield 1;
try {
yield 2;
yield 3;
} finally {
yield "cleanup";
}
}
const g1 = gen();
g1.next(); // { value: 1, done: false }
// å¨ try...finally åæåæ§è¡ã
g1.return("early return"); // { value: 'early return', done: true }
const g2 = gen();
g2.next(); // { value: 1, done: false }
g2.next(); // { value: 2, done: false }
// å¨ try...finally 䏿忧è¡ã
g2.return("early return"); // { value: 'cleanup', done: false }
// 宿å¼è¢«ä¿ç
g2.next(); // { value: 'early return', done: true }
// çæå¨å¤äºå®æç¶æ
g2.return("not so early return"); // { value: 'not so early return', done: true }
finally åçè¿åå¼ä¹å¯ä»¥æä¸º return
è°ç¨è¿åç»æç value
ã
function* gen() {
try {
yield 1;
} finally {
return "cleanup";
}
}
const g1 = gen();
g1.next(); // { value: 1, done: false }
g1.return("early return"); // { value: 'cleanup', done: true }
è§è æµè§å¨å
¼å®¹æ§ åè§
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