for
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
for æã¯ãæ¬å¼§ã§å²ã¿ã»ãã³ãã³ã§åºåã£ã 3 ã¤ã®å¼æ°ã¨ãç¶ãã¦ã«ã¼ãå
ã§å®è¡ãããæï¼ãµã¤ãã¯ãããã¯æï¼ããæãã«ã¼ããæ§æãã¾ãã
試ãã¦ã¿ã¾ããã
let str = "";
for (let i = 0; i < 9; i++) {
str += i;
}
console.log(str);
// äºæ³ãããçµæ: "012345678"
æ§æ
for (initialization; condition; afterthought)
statement
initializationçç¥å¯-
ã«ã¼ããå§ã¾ãåã«ä¸åº¦ã ãè©ä¾¡ãããï¼ä»£å ¥å¼ãå«ãï¼å¼ã¾ãã¯å¤æ°å®£è¨ããµã¤ãã¯ã«ã¦ã³ã¿ã¼å¤æ°ãåæåããããã«ä½¿ããã¾ãããã®å¼ã§ã¯ä»»æã§ã
varãã¼ã¯ã¼ããç¨ãã¦æ°ãã夿°ã宣è¨ãããã¨ãã§ãã¾ããvarã§å®£è¨ããã夿°ã¯ã«ã¼ãå ã®ãã¼ã«ã«å¤æ°ã«ã¯ãªãã¾ãããããªãã¡ãforã«ã¼ããå±ããã¹ã³ã¼ãã¨åãã¹ã³ã¼ãã«ãªãã¾ããletã§å®£è¨ããã夿°ã¯æå ã®ãã¼ã«ã«å¤æ°ã«ãªãã¾ãããã®å¼ã®çµæã¯æ¨ã¦å»ããã¾ãã
conditionçç¥å¯-
ã«ã¼ãã®ããããã®å復å¦çãè¡ãããåã«è©ä¾¡ãããå¼ã§ãããã®å¼ã true ã¨è©ä¾¡ãããå ´åã¯ã
statementãå®è¡ããã¾ãããã®å¼ã false ã¨è©ä¾¡ãããå ´åã¯ãå®è¡ã¯foræ§é ã«ç¶ãæåã®å¼ã«é£ã³ã¾ãããã®æ¡ä»¶ãã¹ãã¯ãªãã·ã§ã³ã§ããçç¥ããå ´åããã®æ¡ä»¶ã¯å¸¸ã« true ã¨è©ä¾¡ããã¾ãã
afterthoughtçç¥å¯-
ã«ã¼ãã®ããããã®å復å¦çã®æå¾ã«è©ä¾¡ãããå¼ã§ããããã¯ã次ã®
conditionã®è©ä¾¡åã«è¡ããã¾ããä¸è¬çã«ã¯ãã«ã¦ã³ã¿ã¼å¤æ°ãæ´æ°ã¾ãã¯å¢å ããããã«ä½¿ããã¾ãã statement-
æ¡ä»¶ã true ã¨è©ä¾¡ãããå ´åã«éãå®è¡ãããæã§ããã«ã¼ãå ã§è¤æ°ã®æãå®è¡ããã«ã¯ããããã¯æã使ç¨ãã¦æãã°ã«ã¼ãåãã¦ãã ãããã«ã¼ãå ã§æãå®è¡ããªãããã«ããã«ã¯ã空æ (
;) ã使ç¨ãã¦ãã ããã
解説
ä»ã®ã«ã¼ãæã¨åæ§ã«ãstatement å
é¨ã§ããã¼å¶å¾¡æã使ç¨ã§ãã¾ãã
ä¾
>for ã®ä½¿ç¨
次㮠for æã¯ã夿° i ã宣è¨ããããã 0 ã«åæåãããã¨ããå§ã¾ãã¾ããi ã 9 ããå°ãããã¨ããã§ãã¯ããç¶ã 2 ã¤ã®æãå®è¡ããã«ã¼ããééããå¾ãã¨ã« i ã 1 å¢å ãã¾ãã
for (let i = 0; i < 9; i++) {
console.log(i);
// ãã®ä»ã®æ
}
åæåãããã¯ã®æ§æ
åæåãããã¯ã¯ãå¼ã¨å¤æ°å®£è¨ã®ä¸¡æ¹ãåãå
¥ãããã¨ãã§ãã¾ãããã ããå¼ã«ã¯æ¬å¼§ã§å²ãã§ããªã in æ¼ç®åã使ç¨ãããã¨ãã§ãã¾ãããfor...in ã«ã¼ãã¨ææ§ã«ãªãããã§ãã
for (let i = "start" in window ? window.start : 0; i < 9; i++) {
console.log(i);
}
// SyntaxError: 'for-in' loop variable declaration may not have an initializer.
// Parenthesize the whole initializer
for (let i = ("start" in window ? window.start : 0); i < 9; i++) {
console.log(i);
}
// Parenthesize the `in` expression
for (let i = ("start" in window) ? window.start : 0; i < 9; i++) {
console.log(i);
}
çç¥å¯è½ãª for ã®å¼
for ã«ã¼ãã®å
é ã«ãã 3 ã¤ã®å¼ã¯ãçç¥å¯è½ã§ããä¾ãã°ãinitialization ãããã¯ã§å¤æ°ãåæåããå¿
è¦ã¯ããã¾ããã
let i = 0;
for (; i < 9; i++) {
console.log(i);
// ãã®ä»ã®æ
}
initialization ãããã¯ã¨åæ§ã«ãcondition ãããã¯ãçç¥å¯è½ã§ãããã®å¼ãçç¥ããå ´åã¯ãæ¬ä½ã®ä¸ã§ã«ã¼ããè±åºã§ããããã«ãã¦ãç¡éã«ã¼ãã«ãªããªãããã«ããªããã°ãªãã¾ããã
for (let i = 0; ; i++) {
console.log(i);
if (i > 3) break;
// ãã®ä»ã®æ
}
3 ã¤ã®ãããã¯ããã¹ã¦çç¥ãããã¨ãã§ãã¾ããç¹°ãè¿ãã¾ããã break æã使ç¨ãã¦ã«ã¼ããçµäºãããã¾ã break æã®æ¡ä»¶ãããæç¹ã§ true ã«ãªãããã«ã夿°ã夿´ï¼å¢å ï¼ããã¦ãããã¨ã確èªãã¦ãã ããã
let i = 0;
for (;;) {
if (i > 3) break;
console.log(i);
i++;
}
ãããã3 ã¤ã®ä½ç½®ã®å¼ããã¹ã¦ä½¿ç¨ãã訳ã§ã¯ãªãå ´åãç¹ã«æåã®å¼ã§å¤æ°ã宣è¨ãããä¸ä½ã®ã¹ã³ã¼ãã§ä½ãã夿´ãã¦ããå ´åã¯ã代ããã« while ã«ã¼ãã使ç¨ãããã¨ãæ¤è¨ããã»ããæå³ãããæç¢ºã«ãªãã¾ãã
let i = 0;
while (i <= 3) {
console.log(i);
i++;
}
åæåãããã¯ã®åå¥ã®å®£è¨
åæåãããã¯å ã§å¤æ°ã宣è¨ããå ´åãä¸ä½ã®ã¹ã³ã¼ãã§å®£è¨ããå ´åã¨ç°ãªãç¹ããããç¹ã«ã«ã¼ãæ¬ä½å ã§ã¯ãã¼ã¸ã£ã使ããå ´åã¯éè¦ã§ããä¾ãã°ãä¸è¨ã®ã³ã¼ããè¦ã¦ãã ããã
for (let i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
æå¾
éãã0ã1ã2 ã¨ãã°åºåãã¾ãããããããã®å¤æ°ãä¸ä½ã¹ã³ã¼ãã§å®ç¾©ããã¦ããå ´åã¯ã
let i = 0;
for (; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
3ã3ã3 ã¨ãã°åºåãã¾ãããªããã¨è¨ãã¨ãããããã® setTimeout ã i 夿°ãéããæ°ããã¯ãã¼ã¸ã£ã使ãã¾ãããi ãã«ã¼ãæ¬ä½ã®ã¹ã³ã¼ãã§ãªãå ´åããã¹ã¦ã®ã¯ãã¼ã¸ã£ã¯æçµçã«å¼ã³åºãããã¨ãã«åã夿°ãåç
§ãã¾ãããã㦠setTimeout() ã®éåæã§ããããããã§ã«ã«ã¼ããçµäºããå¾ã«å®è¡ããããã¹ã¦ã®ãã¥ã¼ã®ã³ã¼ã«ããã¯æ¬ä½ã® i 㯠3 ã¨ããå¤ã«ãªãã¾ãã
ããã¯ãåæåã« var æã使ç¨ããå ´åã«ãèµ·ããã¾ããvar ã§å®£è¨ããã夿°ã¯é¢æ°ã¹ã³ã¼ãã®ã¿ã§ãã¬ãã·ã«ã«ã¹ã³ã¼ãã«ãªããªãï¼ã¤ã¾ããã«ã¼ãæ¬ä½ã®ã¹ã³ã¼ãã«ãããã¨ã¯ã§ããªãï¼ããã§ãã
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
// 3, 3, 3 ã¨ãã°åºå
åæåãããã¯ã®ã¹ã³ã¼ã广ã¯ã宣è¨ãã«ã¼ãæ¬ä½ã®ä¸ã§è¡ããããã¾ãã¾ condition 㨠afterthought ã®é¨åã§ã¢ã¯ã»ã¹å¯è½ã§ãããã®ããã«çè§£ãããã¨ãã§ãã¾ããããæ£ç¢ºã«ã¯ãlet宣è¨ã¯ for ã«ã¼ãã«ç¹åããã¾ãããã initialization ã let 宣è¨ã§ããã°ãã«ã¼ãæ¬ä½ãè©ä¾¡ãããå¾ã以ä¸ã®ãã¨ãæ¯åè¡ããã¾ãã
- æ°ããåå¥ã¹ã³ã¼ãã使ãããæ°ãã
letã宣è¨ããã夿°ã追å ããã¾ãã - ååã®å復å¦çã§ãã¤ã³ããããå¤ãç¨ãã¦ãæ°ãã夿°ãååæåãã¾ãã
afterthoughtãæ°ããã¹ã³ã¼ãã§è©ä¾¡ããã¾ãã
ãã®ãããafterthought å
ã§æ°ãã夿°ãå²ãå½ã¦ã¦ããååå復å¦çããã¨ãã®ãã¤ã³ãã£ã³ã°ã«ã¯å½±é¿ãã¾ããã
initialization ã®å¾ãcondition ãåãã¦è©ä¾¡ãããç´åã«ãæ°ããªåå¥ã¹ã³ã¼ããçæããã¾ãããããã®è©³ç´°ã¯ã¯ãã¼ã¸ã£ã使ãããã¨ã§è¦³å¯å¯è½ã§ãããç¹å®ã®æç¹ã§ã®ãã¤ã³ãã£ã³ã°ãä¿æã§ãã¾ããä¾ãã°ããã®ã³ã¼ãã§ã¯ initialization é¨åã§çæãããã¯ãã¼ã¸ã£ã¯ãafterthought å
ã§ã® i ã®å代å
¥ã«ãã£ã¦æ´æ°ããã¾ããã
for (let i = 0, getI = () => i; i < 3; i++) {
console.log(getI());
}
// ãã°åºå 0, 0, 0
ããã¯ãã«ã¼ãæ¬ä½ã®ä¸ã§ getI ã宣è¨ããå ´åã®ããã« "0, 1, 2" ããã°åºåããããã§ã¯ããã¾ãããããã¯ãgetI ãå復å¦çãããã³ã«åè©ä¾¡ãããã®ã§ã¯ãªãã颿°ãä¸åº¦ä½æãããï¼ã«ã¼ããæåã«åæåãããã¨ãã«å®£è¨ããã夿°ãåç
§ããï¼å¤æ° i ãéããããããã§ãããã®å¾ãi ã®å¤ãæ´æ°ããã¨ãå®éã«ã¯ i ã¨ããæ°ãã夿°ã使ããã¾ãããgetI ã¯ãããè¦ããã¨ãã§ãã¾ããããããä¿®æ£ããã«ã¯ãi ãæ´æ°ããããã³ã« getI ãåè¨ç®ããããã«ãã¾ãã
for (let i = 0, getI = () => i; i < 3; i++, getI = () => i) {
console.log(getI());
}
// ãã°åºå 0, 1, 2
initialization å
ã®å¤æ° i ã¯ãæåã®å復ãå«ãåå復å
ã® i 夿°ã¨ã¯å¥åã®åå¨ã§ãããããã£ã¦ããã®ä¾ã§ã¯ãå復å
ã® i ã®å¤ãäºåã«ã¤ã³ã¯ãªã¡ã³ãããã¦ããã«ãããããããgetI 㯠0 ãè¿ãã¾ãã
for (let i = 0, getI = () => i; i < 3;) {
i++;
console.log(getI());
}
// ãã°åºå 0, 0, 0
å®éã夿° i ã®æåã®ãã¤ã³ãã£ã³ã°ããã£ããã£ãã¦ãå¾ã§ãããå²ãå½ã¦ããã¨ãã§ãã¾ãããã®æ´æ°ãããå¤ã¯ãæ¬¡ã®æ°ãã i ã®ãã¤ã³ãã£ã³ã°ãè¦ãã«ã¼ãæ¬ä½ã«ã¯è¦ãã¾ããã
for (
let i = 0, getI = () => i, incrementI = () => i++;
getI() < 3;
incrementI()
) {
console.log(i);
}
// ãã°åºå 0, 0, 0
ãã㯠"0, 0, 0" ã¨ãã°åºåãã¾ãããªããªããåã«ã¼ãè©ä¾¡ã«ããã i 夿°ã¯å®éã«ã¯å¥åã®å¤æ°ã§ãããgetI 㨠incrementI ã¯ã©ã¡ãã i ã®åæãã¤ã³ãã£ã³ã°ãèªã¿æ¸ããããã®å¾ã«å®£è¨ããããã®ã«ã¯å¯¾å¿ããªãããã§ãã
æãæããªã for ã®ä½¿ç¨
以ä¸ã® for ã®ç¹°ãè¿ãã§ã¯ã final-expression å¥ã®ä¸ã§ã«ããããã¼ãã®ãªãã»ããä½ç½®ãæ¤ç´¢ãã¦ãã¾ãã statement ç¯ã使ç¨ããå¿
è¦ããªãå ´åã¯ã代ããã«ã»ãã³ãã³ã使ç¨ãã¦ãã ããã
function showOffsetPos(id) {
let left = 0;
let top = 0;
for (
let itNode = document.getElementById(id); // åæå
itNode; // æ¡ä»¶å¼
left += itNode.offsetLeft,
top += itNode.offsetTop,
itNode = itNode.offsetParent // æ´æ°å¼
); // ã»ãã³ãã³
console.log(
`Offset position of "${id}" element:
left: ${left}px;
top: ${top}px;`,
);
}
showOffsetPos("content");
// åºåçµæ:
// Offset position of "content" element:
// left: 0px;
// top: 153px;
for æã®å¾ã®ã»ãã³ãã³ã¯å¿
é ã§ãããã¨ã«æ³¨æãã¦ãã ãããããã¯ç©ºæã¨ãã¦ã®å½¹å²ãæããããã§ããããããªãã¨ãfor æã¯ä»¥ä¸ã® console.log è¡ã statement ç¯ã¨ãã¦åå¾ããlog ãè¤æ°åå®è¡ããããã¨ã«ãªãã
2 ã¤ã®å復ç¨å¤æ°ã®ä½¿ç¨
ã«ã³ãæ¼ç®åãç¨ãã¦ãfor ã«ã¼ãã§åæã«æ´æ°ããã 2 ã¤ã®ã«ã¦ã³ã¿ã¼ã使ãããã¨ãã§ãã¾ããè¤æ°ã® let ã var ã®å®£è¨ãã«ã³ãã§çµåãããã¨ãã§ãã¾ãã
const arr = [1, 2, 3, 4, 5, 6];
for (let l = 0, r = arr.length - 1; l < r; l++, r--) {
console.log(arr[l], arr[r]);
}
// 1 6
// 2 5
// 3 4
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-for-statement > |