颿°ã®è»é
次ã®ã³ã¼ã㯠shooters ã®é
åãä½ãã¾ãã
ãã¹ã¦ã®é¢æ°ã¯ããã®çªå·ãåºåããããã®ãã®ã§ããããããã©ããééã£ã¦ãã¾ãâ¦
function makeArmy() {
let shooters = [];
let i = 0;
while (i < 10) {
let shooter = function() { // å°æ(shooter) 颿°
alert( i ); // ãã®çªå·ã表示ããã¹ã
};
shooters.push(shooter);
i++;
}
return shooters;
}
let army = makeArmy();
army[0](); // å°æ çªå· 0 表示 10
army[5](); // ã¾ã çªå· 5 ã§ãã表示㯠10...
// ... ãã¹ã¦ã®å°æã¯ 0, 1, 2, 3... ã®ä»£ããã« 10 ã表示ããã¾ã
ãªããã¹ã¦ã®å°æ(shooters)ã¯åããã®ã表示ãããã®ã§ãããï¼æå¾ éãã«åä½ããããã³ã¼ããç´ãã¦ãã ããã
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] ã®è¦ç´ ãåå¾(ããã¯é¢æ°ã«ãªãã¾ã)ããå¼ã³åºãã¾ãã
ãã¦ããªããã¹ã¦ã®é¢æ°ã¯åããã®ã表示ããã®ã§ãããï¼
ããã¯ãshooter 颿°ã®å
å´ã«ãã¼ã«ã«å¤æ° i ããªãããã§ãããã®ãããªé¢æ°ãå¼ã°ããã¨ããi ã¯ãã®å¤é¨ã®ã¬ãã·ã«ã«ç°å¢ããåããã¾ãã
i ã®å¤ã¯ä½ã«ãªãã§ãããï¼
ã½ã¼ã¹ãè¦ãã¨:
function makeArmy() {
...
let i = 0;
while (i < 10) {
let shooter = function() { // shooter function
alert( i ); // should show its number
};
...
}
...
}
â¦i ã¯ç¾å¨ã® makeArmy() ã®å®è¡ã«é¢é£ä»ããããã¬ãã·ã«ã«ç°å¢ã§çãã¦ããã®ããããã¾ããããããarmy[5]() ãå¼ã°ããã¨ããmakeArmy ã¯ãã§ã«ãã®å¦çãçµãã¦ããã®ã§ãi ã¯æå¾ã®å¤ã§ãã 10 (while ã®æå¾) ã§ãã
çµæã¨ãã¦ããã¹ã¦ã® shooter 颿°ã¯å¤é¨ã®ã¬ãã·ã«ã«ç°å¢ããåãæå¾ã®å¤ i=10 ãåãã¾ãã
ä¿®æ£ã¯ã¨ã¦ãã·ã³ãã«ã§ãã:
function makeArmy() {
let shooters = [];
for(let i = 0; i < 10; i++) {
let shooter = function() { // shooter function
alert( i ); // should show its number
};
shooters.push(shooter);
}
return shooters;
}
let army = makeArmy();
army[0](); // 0
army[5](); // 5
ããã§ãæ£ããåãã¾ãããªããªããfor (..) {...} ã§æ¯åã³ã¼ããããã¯ãå®è¡ãããi ã®å¤ã«å¯¾å¿ããæ°ããã¬ãã·ã«ã«ç°å¢ãä½ãããããã§ãã
å¾ã£ã¦ãi ã®å¤ã¯ä»ã¯å°ãè¿ãã«ããã¾ããmakeArmy ã¬ãã·ã«ã«ç°å¢ã§ã¯ãªããç¾å¨ã®ã«ã¼ãã¤ãã¬ã¼ã·ã§ã³ã«å¯¾å¿ããã¬ãã·ã«ã«ç°å¢ã®ä¸ã§ããshooter ã¯ä½ãããã¬ãã·ã«ã«ç°å¢ããå¤ãåãåºãã¾ãã
ããã¯ãwhile ã for ã§æ¸ãç´ãã¾ããã
å¥ã®ããªãã¯ã§ãå¯è½ã§ãããã®è©±é¡ãããçè§£ããããã«æ¬¡ã®ã³ã¼ããè¦ã¦ã¿ã¾ãããã:
function makeArmy() {
let shooters = [];
let i = 0;
while (i < 10) {
let j = i;
let shooter = function() { // shooter function
alert( j ); // should show its number
};
shooters.push(shooter);
i++;
}
return shooters;
}
let army = makeArmy();
army[0](); // 0
army[5](); // 5
ã¡ããã© for ã¨åãããã« while ã«ã¼ãã¯åå®è¡ã«å¯¾ããã¬ãã·ã«ã«ç°å¢ãä½ãã¾ããå¾ã£ã¦ãshooter ã®æ£ããå¤ãåå¾ãããã¨ã確èªã§ãã¾ãã
ç§ãã¡ã¯ let j = i ã®ã³ãã¼ããã¦ãã¾ããããã¯ã«ã¼ãæ¬ä½ã®ãã¼ã«ã« j ãä½ããi ã®å¤ãã³ãã¼ãã¾ããããªããã£ã㯠âå¤ã«ãã£ã¦â ã³ãã¼ãããã®ã§ãç¾å¨ã®ã«ã¼ãã¤ãã¬ã¼ã·ã§ã³ã«å±ããå®éã«å®å
¨ã«ç¬ç«ãã i ã®ã³ãã¼ã«ãªãã¾ãã
function makeArmy() {
let shooters = [];
for(let i = 0; i < 10; i++) {
let shooter = function() { // shooter function
alert( i ); // should show its number
};
shooters.push(shooter);
}
return shooters;
}
ãµã³ãããã¯ã¹ã§ãã¹ãã¨ä¸ç·ã«è§£çãéã