彿°å¤§å
ä¸åç代ç å建äºä¸ä¸ª shooters æ°ç»ã
æ¯ä¸ªå½æ°é½åºè¯¥è¾åºå ¶ç¼å·ãä½å¥½ååºäºç¹é®é¢â¦â¦
function makeArmy() {
let shooters = [];
let i = 0;
while (i < 10) {
let shooter = function() { // å建ä¸ä¸ª shooter 彿°ï¼
alert( i ); // åºè¯¥æ¾ç¤ºå
¶ç¼å·
};
shooters.push(shooter); // å°æ¤ shooter 彿°æ·»å å°æ°ç»ä¸
i++;
}
// â¦â¦è¿å shooters æ°ç»
return shooters;
}
let army = makeArmy();
// â¦â¦ææç shooter æ¾ç¤ºç齿¯ 10ï¼è䏿¯å®ä»¬çç¼å· 0, 1, 2, 3...
army[0](); // ç¼å·ä¸º 0 ç shooter æ¾ç¤ºçæ¯ 10
army[1](); // ç¼å·ä¸º 1 ç shooter æ¾ç¤ºçæ¯ 10
army[2](); // 10ï¼å
¶ä»ç乿¯è¿æ ·ã
为ä»ä¹ææç shooter æ¾ç¤ºç齿¯åæ ·çå¼ï¼
ä¿®æ¹ä»£ç 以使å¾ä»£ç è½å¤æç §æä»¬é¢æç飿 ·å·¥ä½ã
让æä»¬æ£æ¥ä¸ä¸ makeArmy å
é¨å°åºåçäºä»ä¹ï¼é£æ ·çæ¡å°±æ¾èæè§äºã
-
å®å建äºä¸ä¸ªç©ºæ°ç»
shootersï¼let shooters = []; -
å¨å¾ªç¯ä¸ï¼éè¿
shooters.push(function)ç¨å½æ°å¡«å å®ãæ¯ä¸ªå ç´ é½æ¯å½æ°ï¼æä»¥æ°ç»çèµ·æ¥æ¯è¿æ ·çï¼
shooters = [ function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); }, function () { alert(i); } ]; -
该æ°ç»è¿åèªå½æ°ã
ç¶åï¼å¯¹æ°ç»ä¸çä»»ææ°ç»é¡¹çè°ç¨ï¼ä¾å¦è°ç¨
army[5]()ï¼å®æ¯ä¸ä¸ªå½æ°ï¼ï¼å°é¦å 仿°ç»ä¸è·åå ç´army[5]()å¹¶è°ç¨å®ãé£ä¹ï¼ä¸ºä»ä¹æææ¤ç±»å½æ°é½æ¾ç¤ºçæ¯ç¸åçå¼ï¼
10å¢ï¼è¿æ¯å 为
shooter彿°å 没æå±é¨åéiãå½ä¸ä¸ªè¿æ ·ç彿°è¢«è°ç¨æ¶ï¼iæ¯æ¥èªäºå¤é¨è¯æ³ç¯å¢çãé£ä¹ï¼
iç弿¯ä»ä¹å¢ï¼å¦ææä»¬çä¸ä¸æºä»£ç ï¼
function makeArmy() { ... let i = 0; while (i < 10) { let shooter = function() { // shooter 彿° alert( i ); // åºè¯¥æ¾ç¤ºå®èªå·±çç¼å· }; shooters.push(shooter); // å° shooter 彿°æ·»å å°è¯¥æ°ç»ä¸ i++; } ... }â¦â¦æä»¬å¯ä»¥çå°ï¼ææç
shooter彿°é½æ¯å¨makeArmy()çè¯æ³ç¯å¢ä¸è¢«å建çãä½å½army[5]()被è°ç¨æ¶ï¼makeArmyå·²ç»è¿è¡å®äºï¼æåiçå¼ä¸º10ï¼while循ç¯å¨i=10æ¶åæ¢ï¼ãå æ¤ï¼ææç
shooter彿°è·å¾ç齿¯å¤é¨è¯æ³ç¯å¢ä¸çåä¸ä¸ªå¼ï¼å³æåçi=10ãæ£å¦ä½ å¨ä¸è¾¹æçå°ç飿 ·ï¼å¨
while {...}åçæ¯æ¬¡è¿ä»£ä¸ï¼é½ä¼å建ä¸ä¸ªæ°çè¯æ³ç¯å¢ãå æ¤ï¼è¦è§£å³æ¤é®é¢ï¼æä»¬å¯ä»¥å°içå¼å¤å¶å°while {...}åå çåéä¸ï¼å¦ä¸æç¤ºï¼function makeArmy() { let shooters = []; let i = 0; while (i < 10) { let j = i; let shooter = function() { // shooter 彿° alert( j ); // åºè¯¥æ¾ç¤ºå®èªå·±çç¼å· }; shooters.push(shooter); i++; } return shooters; } let army = makeArmy(); // ç°å¨ä»£ç æ£ç¡®è¿è¡äº army[0](); // 0 army[5](); // 5å¨è¿éï¼
let j = i声æäºä¸ä¸ªâå±é¨è¿ä»£âåéjï¼å¹¶å°iå¤å¶å°å ¶ä¸ãåå§ç±»åæ¯âæå¼âå¤å¶çï¼å æ¤å®é 䏿们å¾å°çæ¯å±äºå½å循ç¯è¿ä»£çç¬ç«çiç坿¬ãshooter 彿°æ£ç¡®è¿è¡äºï¼å 为
iå¼çä½ç½®æ´è¿äºï¼è¯æ³¨ï¼æè½¬å°äºæ´å é¨çè¯æ³ç¯å¢ï¼ã䏿¯å¨makeArmy()çè¯æ³ç¯å¢ä¸ï¼èæ¯å¨ä¸å½å循ç¯è¿ä»£ç¸å¯¹åºçè¯æ³ç¯å¢ä¸ï¼å¦ææä»¬ä¸å¼å§ä½¿ç¨
for循ç¯ï¼ä¹å¯ä»¥é¿å è¿æ ·çé®é¢ï¼åè¿æ ·ï¼function makeArmy() { let shooters = []; for(let i = 0; i < 10; i++) { let shooter = function() { // shooter 彿° alert( i ); // åºè¯¥æ¾ç¤ºå®èªå·±çç¼å· }; shooters.push(shooter); } return shooters; } let army = makeArmy(); army[0](); // 0 army[5](); // 5è¿æ¬è´¨ä¸æ¯ä¸æ ·çï¼å 为
for循ç¯å¨æ¯æ¬¡è¿ä»£ä¸ï¼é½ä¼çæä¸ä¸ªå¸¦æèªå·±çåéiçæ°è¯æ³ç¯å¢ãå æ¤ï¼å¨æ¯æ¬¡è¿ä»£ä¸çæçshooter彿°å¼ç¨ç齿¯èªå·±çiã
è³æ¤ï¼ä½ å·²ç»è±äºå¾é¿æ¶é´æ¥é
è¯»æ¬æï¼åç°æç»çè§£å³æ¹æ¡å°±è¿ä¹ç®å â ä½¿ç¨ for 循ç¯ï¼ä½ å¯è½ä¼çé® ââ æè±äºè¿ä¹é¿æ¶é´è¯»è¿ç¯æç« ï¼å¼å¾åï¼
å ¶å®ï¼å¦æä½ å¯ä»¥è½»æ¾å°æç½å¹¶ç对æ¬é¢ç®ï¼ä½ åºè¯¥å°±ä¸ä¼é 读å®ççæ¡ãæä»¥ï¼å¸æè¿ä¸ªé¢ç®å¯ä»¥å¸®å©ä½ æ´å¥½å°çè§£éå ã
æ¤å¤ï¼ç¡®å®å卿äºäººç¸è¾äº for æ´å欢 whileï¼ä»¥åå
¶ä»æ
åµã