ê°ë°ì íë¤ ë³´ë©´ ì¬ë¬ ëìì ë°ë³µí´ì¼ íë ê²½ì°ê° ì¢ ì¢ ìê¹ëë¤.
ìí 목ë¡ìì ìíì ì°¨ë¡ëë¡ ì¶ë ¥íê±°ë ì«ì를 1ë¶í° 10ê¹ì§ íëì© ì¦ê°ìí¤ë©´ì ëì¼í ì½ë를 ë°ë³µ ì¤íí´ì¼ íë ê²½ì°ê°ì´ ë§ì´ì£ .
ë°ë³µë¬¸(loop) ì ì¬ì©íë©´ ëì¼í ì½ë를 ì¬ë¬ ë² ë°ë³µí ì ììµëë¤.
âwhileâ ë°ë³µë¬¸
while ë°ë³µë¬¸ì 문ë²ì ë¤ìê³¼ ê°ìµëë¤.
while (condition) {
// ì½ë
// 'ë°ë³µë¬¸ 본문(body)'ì´ë¼ ë¶ë¦¼
}
condition(ì¡°ê±´)ì´ truthy ì´ë©´ ë°ë³µë¬¸ 본문ì ì½ëê° ì¤íë©ëë¤.
ìë ë°ë³µë¬¸ì ì¡°ê±´ i < 3ì ë§ì¡±í ëì i를 ì¶ë ¥í´ì¤ëë¤.
let i = 0;
while (i < 3) { // 0, 1, 2ê° ì¶ë ¥ë©ëë¤.
alert( i );
i++;
}
ë°ë³µë¬¸ ë³¸ë¬¸ì´ í ë² ì¤íëë ê²ì ë°ë³µ(iteration, ì´í°ë ì´ì ) ì´ë¼ê³ ë¶ë¦ ëë¤. ì ìììì ë°ë³µë¬¸ì´ ì¸ ë²ì ì´í°ë ì´ì ì ë§ëëë¤.
i++ê° ììë¤ë©´ ì´ë¡ ì ì¼ë¡ ë°ë³µë¬¸ì´ ììí ë°ë³µëìì ê²ëë¤. ê·¸ë°ë° ë¸ë¼ì°ì ë ì´ë° 무í ë°ë³µì ë©ì¶ê² í´ì£¼ë ì¤ì§ì ì¸ ìë¨ì ì ê³µí©ëë¤. ìë² ì¬ì´ë ìë°ì¤í¬ë¦½í¸ë ì´ë° ìë¨ì ì ê³µí´ ì£¼ë¯ë¡ 무íì¼ë¡ ë°ë³µëë íë¡ì¸ì¤ë¥¼ ì¢
ë£í ì ììµëë¤.
ë°ë³µë¬¸ ì¡°ê±´ì ë¹êµë¿ë§ ìëë¼ ëª¨ë ì¢
ë¥ì ííì, ë³ìê° ì¬ ì ììµëë¤. ì¡°ê±´ì whileì ìí´ íê°ëê³ , íê° íì ë¶ë¦°ê°ì¼ë¡ ë³ê²½ë©ëë¤.
ìë ìììì while (i != 0)ì ì§§ê² ì¤ì¬ while (i)ë¡ ë§ë¤ì´ë³´ììµëë¤.
let i = 3;
while (i) { // iê° 0ì´ ëë©´ ì¡°ê±´ì´ falsyê° ëë¯ë¡ ë°ë³µë¬¸ì´ ë©ì¶¥ëë¤.
alert( i );
i--;
}
ë°ë³µë¬¸ ë³¸ë¬¸ì´ í ì¤ì§ë¦¬ 문ì´ë¼ë©´ ì¤ê´í¸ {â¦}를 ìëµí ì ììµëë¤.
let i = 3;
while (i) alert(i--);
âdoâ¦whileâ ë°ë³µë¬¸
do..while 문ë²ì ì¬ì©íë©´ conditionì ë°ë³µë¬¸ 본문 ìëë¡ ì®ê¸¸ ì ììµëë¤.
do {
// ë°ë³µë¬¸ 본문
} while (condition);
ì´ë ë³¸ë¬¸ì´ ë¨¼ì ì¤íëê³ , ì¡°ê±´ì íì¸í í ì¡°ê±´ì´ truthyì¸ ëìì ë³¸ë¬¸ì´ ê³ì ì¤íë©ëë¤.
ìì:
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
do..while 문ë²ì ì¡°ê±´ì´ truthy ì¸ì§ ìëì§ì ìê´ìì´, 본문ì ìµìí í ë²ì´ë¼ë ì¤ííê³ ì¶ì ëë§ ì¬ì©í´ì¼ í©ëë¤. ëë¤ìì ìí©ìì do..whileë³´ë¤ while(â¦) {â¦}ì´ ì í©í©ëë¤.
âforâ ë°ë³µë¬¸
for ë°ë³µë¬¸ì while ë°ë³µë¬¸ë³´ë¤ë ë³µì¡íì§ë§ ê°ì¥ ë§ì´ ì°ì´ë ë°ë³µë¬¸ì
ëë¤.
문ë²ì ë¤ìê³¼ ê°ìµëë¤.
for (begin; condition; step) {
// ... ë°ë³µë¬¸ 본문 ...
}
for문ì 구ì±íë ê° ììê° ë¬´ìì ì미íëì§ ììë´
ìë¤. ìë ë°ë³µë¬¸ì ì¤ííë©´ iê° 0ë¶í° 3ì´ ë ëê¹ì§(ë¨, 3ì í¬í¨íì§ ìì) alert(i)ê° í¸ì¶ë©ëë¤.
for (let i = 0; i < 3; i++) { // 0, 1, 2ê° ì¶ë ¥ë©ëë¤.
alert(i);
}
ì´ì for문ì êµ¬ì± ìì를 íëì© ì´í´ë´
ìë¤.
| êµ¬ì± ìì | ||
|---|---|---|
| begin | i = 0 |
ë°ë³µë¬¸ì ì§ì í ë ë¨ í ë² ì¤íë©ëë¤. |
| condition | i < 3 |
ë°ë³µë§ë¤ í´ë¹ ì¡°ê±´ì´ íì¸ë©ëë¤. falseì´ë©´ ë°ë³µë¬¸ì ë©ì¶¥ëë¤. |
| body | alert(i) |
conditionì´ truthyì¼ ëì ê³ìí´ì ì¤íë©ëë¤. |
| step | i++ |
ê° ë°ë³µì bodyê° ì¤íë ì´íì ì¤íë©ëë¤. |
ì¼ë°ì ì¸ ë°ë³µë¬¸ ìê³ ë¦¬ì¦ì ë¤ìê³¼ ê°ìµëë¤.
beginì ì¤íí¨
â (conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨)
â (conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨)
â (conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨)
â ...
beginì´ í ì°¨ë¡ ì¤íë ì´íì, condition íì¸ê³¼ body, stepì´ ê³ìí´ì ë°ë³µ ì¤íëì£ .
ë°ë³µë¬¸ì ì²ì ë°°ì°ì ë¤ë©´, ì ìì를 ì¤ííì ë ì´ë¤ ê³¼ì ì ê±°ì³ ì¼ë¿ ì°½ì´ ì¶ë ¥ëëì§ ì¢ ì´ì ì ì´ê°ë©° ê³µë¶í´ë³´ì¸ì. ì´ë ê² íë©´ ë°ë³µë¬¸ì ì½ê² ì´í´í ì ììµëë¤.
ì íí ì´ë¤ ê³¼ì ì ê±°ì¹ëì§ë ìë ìììì íì¸í ì ììµëë¤.
// for (let i = 0; i < 3; i++) alert(i)
// beginì ì¤íí¨
let i = 0
// conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨
if (i < 3) { alert(i); i++ }
// conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨
if (i < 3) { alert(i); i++ }
// conditionì´ truthyì´ë©´ â body를 ì¤íí í, stepì ì¤íí¨
if (i < 3) { alert(i); i++ }
// i == 3ì´ë¯ë¡ ë°ë³µë¬¸ ì¢
ë£
ì§ê¸ê¹ì§ âì¹´ì´í°â ë³ì i를 ë°ë³µë¬¸ ììì ì ì¸íììµëë¤. ì´ë° ë°©ìì âì¸ë¼ì¸â ë³ì ì ì¸ì´ë¼ê³ ë¶ë¦
ëë¤. ì´ë ê² ì ì¸í ë³ìë ë°ë³µë¬¸ ìììë§ ì ê·¼í ì ììµëë¤.
for (let i = 0; i < 3; i++) {
alert(i); // 0, 1, 2
}
alert(i); // Error: i is not defined
ì¸ë¼ì¸ ë³ì ì ì¸ ëì , ì ìëì´ìë ë³ì를 ì¬ì©í ìë ììµëë¤.
let i = 0;
for (i = 0; i < 3; i++) { // 기존ì ì ìë ë³ì ì¬ì©
alert(i); // 0, 1, 2
}
alert(i); // 3, ë°ë³µë¬¸ ë°ìì ì ì¸í ë³ìì´ë¯ë¡ ì¬ì©í ì ìì
êµ¬ì± ìì ìëµí기
for문ì êµ¬ì± ìì를 ìëµíë ê²ë ê°ë¥í©ëë¤.
ë°ë³µë¬¸ì´ ììë ë ì무ê²ë í íìê° ìì¼ë©´ beginì ìëµíë ê²ì´ ê°ë¥íì£ .
ìì를 ì´í´ë´ ìë¤.
let i = 0; // i를 ì ì¸íê³ ê°ë í ë¹íììµëë¤.
for (; i < 3; i++) { // 'begin'ì´ íìíì§ ì기 ë문ì ìëµíììµëë¤.
alert( i ); // 0, 1, 2
}
step ìì ìëµí ì ììµëë¤.
let i = 0;
for (; i < 3;) {
alert( i++ );
}
ìì ê°ì´ for문ì 구ì±íë©´ while (i < 3)ê³¼ ëì¼í´ì§ëë¤.
모ë êµ¬ì± ìì를 ìëµí ìë ìëë°, ì´ë ê² ëë©´ 무í ë°ë³µë¬¸ì´ ë§ë¤ì´ì§ëë¤.
for (;;) {
// ëì ìì´ ë³¸ë¬¸ì´ ì¤íë©ëë¤.
}
for문ì 구ì±ìì를 ìëµí ë 주ìí ì ì ë ê°ì ; ì¸ë¯¸ì½ë¡ ì ê¼ ë£ì´ì£¼ì´ì¼ íë¤ë ì ì
ëë¤. íëë¼ë ìì¼ë©´ ë¬¸ë² ìë¬ê° ë°ìí©ëë¤.
ë°ë³µë¬¸ ë¹ ì ¸ëì¤ê¸°
ëê°ë ë°ë³µë¬¸ì ì¡°ê±´ì´ falsyê° ëë©´ ë°ë³µë¬¸ì´ ì¢ ë£ë©ëë¤.
ê·¸ë°ë° í¹ë³í ì§ììì¸ break를 ì¬ì©íë©´ ì¸ì ë ìíë ëì ë°ë³µë¬¸ì ë¹ ì ¸ëì¬ ì ììµëë¤.
ìë ììì ë°ë³µë¬¸ì ì¬ì©ììê² ì¼ë ¨ì ì«ì를 ì ë ¥íëë¡ ìë´íê³ , ì¬ì©ìê° ìë¬´ë° ê°ë ì ë ¥íì§ ìì¼ë©´ ë°ë³µë¬¸ì 'ì¢ ë£âí©ëë¤.
let sum = 0;
while (true) {
let value = +prompt("ì«ì를 ì
ë ¥íì¸ì.", '');
if (!value) break; // (*)
sum += value;
}
alert( 'í©ê³: ' + sum );
(*)ë¡ íìí ì¤ì ìë breakë ì¬ì©ìê° ì무ê²ë ì
ë ¥íì§ ìê±°ë Cancelë²í¼ì ëë ì ë íì±íë©ëë¤. ì´ë ë°ë³µë¬¸ì´ ì¦ì ì¤ë¨ëê³ ì ì´ íë¦ì´ ë°ë³µë¬¸ ìë 첫 ë²ì§¸ ì¤ë¡ ì´ëí©ëë¤. ì¬ê¸°ì alertê° ê·¸ 첫 ë²ì§¸ ì¤ì´ ëê² ì£ .
ë°ë³µë¬¸ì ìì ì§ì ì´ë ë ì§ì ìì ì¡°ê±´ì íì¸íë ê²ì´ ìëë¼ ë³¸ë¬¸ ê°ì´ë° í¹ì 본문 ì¬ë¬ ê³³ìì ì¡°ê±´ì íì¸í´ì¼ íë ê²½ì°, â무í ë°ë³µë¬¸ + breakâ ì¡°í©ì ì¬ì©íë©´ ì¢ìµëë¤.
ë¤ì ë°ë³µì¼ë¡ ëì´ê°ê¸°
continue ì§ììë breakì 'ê°ë²¼ì´ ë²ì âì
ëë¤. continueë ì ì²´ ë°ë³µë¬¸ì ë©ì¶ì§ ììµëë¤. ëì ì íì¬ ì¤í ì¤ì¸ ì´í°ë ì´ì
ì ë©ì¶ê³ ë°ë³µë¬¸ì´ ë¤ì ì´í°ë ì´ì
ì ê°ì ë¡ ì¤íìí¤ëë¡ í©ëë¤(ì¡°ê±´ì íµê³¼í ë).
continueë íì¬ ë°ë³µì ì¢
ë£ìí¤ê³ ë¤ì ë°ë³µì¼ë¡ ëì´ê°ê³ ì¶ì ë ì¬ì©í ì ììµëë¤.
ìë ë°ë³µë¬¸ì continue를 ì¬ì©í´ íìë§ ì¶ë ¥í©ëë¤.
for (let i = 0; i < 10; i++) {
// ì¡°ê±´ì´ ì°¸ì´ë¼ë©´ ë¨ììë 본문ì ì¤íëì§ ììµëë¤.
if (i % 2 == 0) continue;
alert(i); // 1, 3, 5, 7, 9ê° ì°¨ë¡ëë¡ ì¶ë ¥ë¨
}
iê° ì§ìì´ë©´ continueê° ë³¸ë¬¸ ì¤íì ì¤ë¨ìí¤ê³ ë¤ì ì´í°ë ì´ì
ì´ ì¤íëê² í©ëë¤(iê° íë ì¦ê°íê³ , ë¤ì ë°ë³µì´ ì¤íë¨). ë°ë¼ì alert í¨ìë ì¸ìê° íìì¼ ëë§ í¸ì¶ë©ëë¤.
continueë ì¤ì²©ì ì¤ì´ë ë° ëìì ì¤ëë¤.íì를 ì¶ë ¥í´ì£¼ë ììë ìëì²ë¼ ì길 ìë ììµëë¤.
for (let i = 0; i < 10; i++) {
if (i % 2) {
alert( i );
}
}
기ì ì ì¸ ê´ì ìì ë´¤ì ë, ì´ ììë ì쪽ì ìë ììì ëì¼í©ëë¤. continue를 ì¬ì©íë ëì ì½ë를 if ë¸ë¡ì¼ë¡ ê°ì¼ ì ë§ ë¤ë¦
ëë¤.
ê·¸ë°ë° ì´ë ê² ì½ë를 ìì±íë©´ ë¶ìì©ì¼ë¡ ì¤ì²© ë 벨(ì¤ê´í¸ ìì alert í¸ì¶)ì´ íë ë ëì´ë©ëë¤. if ìì ì½ëê° ê¸¸ì´ì§ë¤ë©´ ì ì²´ ê°ë
ì±ì´ ë¨ì´ì§ ì ììµëë¤.
breakë continueê° ì¬ ì ììµëë¤.ííìì´ ìë ë¬¸ë² êµ¬ì¡°(syntax construct)ë ì¼í ì°ì°ì ?ì ì¬ì©í ì ìë¤ë ì ì íì ì ìíì기 ë°ëëë¤. í¹í breakë continue ê°ì ì§ììë ì¼í ì°ì°ìì ì¬ì©íë©´ ì ë©ëë¤.
ìëì ê°ì ì¡°ê±´ë¬¸ì´ ìë¤ê³ í´ë´ ìë¤.
if (i > 5) {
alert(i);
} else {
continue;
}
물ìí를 ì¬ì©í´ì ì 조건문ì ìëì ê°ì´ ë°ê¾¸ë ¤ë ìë를 í ì ììê²ëë¤.
(i > 5) ? alert(i) : continue; // ì¬ê¸°ì continue를 ì¬ì©íë©´ ì ë©ëë¤.
ì´ë° ì½ëë ë¬¸ë² ìë¬ë¥¼ ë°ììíµëë¤.
ì´ë 물ìí ì°ì°ì ?를 if문 ëì©ì¼ë¡ ì°ì§ ë§ìì¼ íë ì´ì ì¤ íëì
ëë¤.
break/continueì ë ì´ë¸
ì¬ë¬ ê°ì ì¤ì²© ë°ë³µë¬¸ì í ë²ì ë¹ ì ¸ëìì¼ íë ê²½ì°ê° ì¢ ì¢ ì기곤 í©ëë¤.
iì j를 ë°ë³µíë©´ì í롬íí¸ ì°½ì (0,0)ë¶í° (2,2)ê¹ì§ë¥¼ 구ì±íë ì¢í (i, j)를 ì
ë ¥íê² í´ì£¼ë ìì를 ì´í´ë´
ìë¤.
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`(${i},${j})ì ê°`, '');
// ì¬ê¸°ì ë©ì¶°ì ìë쪽ì `ìë£!`ê° ì¶ë ¥ëê² íë ¤ë©´ ì´ë»ê² í´ì¼ í ê¹ì?
}
}
alert('ìë£!');
ì¬ì©ìê° Cancel ë²í¼ì ëë ì ë ë°ë³µë¬¸ì ì¤ë¨ìí¬ ë°©ë²ì´ íìí©ëë¤.
input ìëì íë²í break ì§ìì를 ì¬ì©íë©´ ì쪽ì ìë ë°ë³µë¬¸ë§ ë¹ ì ¸ëì¬ ì ììµëë¤. ì´ê²ë§ì¼ë¡ ì¶©ë¶íì§ ììµëë¤(ì¤ì²© ë°ë³µë¬¸ì í¬í¨í ë°ë³µë¬¸ ë ê° ëª¨ë를 ë¹ ì ¸ëìì¼ í기 ë문ì´ì£ â ì®ê¸´ì´). ì´ë´ ë ë ì´ë¸ì ì¬ì©í ì ììµëë¤.
ë ì´ë¸(label) ì ë°ë³µë¬¸ ìì ì½ë¡ ê³¼ í¨ê» ì°ì´ë ìë³ìì ëë¤.
labelName: for (...) {
...
}
ë°ë³µë¬¸ ììì break <labelName>문ì ì¬ì©íë©´ ë ì´ë¸ì í´ë¹íë ë°ë³µë¬¸ì ë¹ ì ¸ëì¬ ì ììµëë¤.
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`(${i},${j})ì ê°`, '');
// ì¬ì©ìê° ì무ê²ë ì
ë ¥íì§ ìê±°ë Cancel ë²í¼ì ë르면 ë ë°ë³µë¬¸ 모ë를 ë¹ ì ¸ëìµëë¤.
if (!input) break outer; // (*)
// ì
ë ¥ë°ì ê°ì ê°ì§ê³ 무ì¸ê°ë¥¼ í¨
}
}
alert('ìë£!');
ì ìììì break outerë outerë¼ë ë ì´ë¸ì´ ë¶ì ë°ë³µë¬¸ì ì°¾ê³ , í´ë¹ ë°ë³µë¬¸ì ë¹ ì ¸ëì¤ê² í´ì¤ëë¤.
ë°ë¼ì ì ì´ íë¦ì´ (*)ìì alert('ìë£!')ë¡ ë°ë¡ ë°ëëë¤.
ë ì´ë¸ì ë³ëì ì¤ì ì¨ì£¼ë ê²ë ê°ë¥í©ëë¤.
outer:
for (let i = 0; i < 3; i++) { ... }
continue ì§ìì를 ë ì´ë¸ê³¼ í¨ê» ì¬ì©íë ê²ë ê°ë¥í©ëë¤. ë ê°ì§ë¥¼ ê°ì´ ì¬ì©íë©´ ë ì´ë¸ì´ ë¶ì ë°ë³µë¬¸ì ë¤ì ì´í°ë ì´ì
ì´ ì¤íë©ëë¤.
ë ì´ë¸ì ì¬ì©íë¤ê³ í´ì ìíë ê³³ì¼ë¡ ë§ìëë¡ ì íí ì ìë ê²ì ìëëë¤.
ìë ììì²ë¼ ë ì´ë¸ì ì¬ì©íë ê²ì ë¶ê°ë¥í©ëë¤.
break label; // ìë for 문ì¼ë¡ ì íí ì ììµëë¤.
label: for (...)
breakì continueë ë°ë³µë¬¸ ìììë§ ì¬ì©í ì ìê³ , ë ì´ë¸ì ë°ëì breakì´ë continue ì§ìì ìì ìì´ì¼ í©ëë¤.
ìì½
ì§ê¸ê¹ì§ ì¸ ì¢ ë¥ì ë°ë³µë¬¸ì ëí´ ì´í´ë³´ììµëë¤.
whileâ ê° ë°ë³µì´ ììí기 ì ì ì¡°ê±´ì íì¸í©ëë¤.do..whileâ ê° ë°ë³µì´ ëë íì ì¡°ê±´ì íì¸í©ëë¤.for (;;)â ê° ë°ë³µì´ ììí기 ì ì ì¡°ê±´ì íì¸í©ëë¤. ì¶ê° ì¸í ì í ì ììµëë¤.
â무íâ ë°ë³µë¬¸ì ë³´íµ while(true)를 ì¨ì ë§ëëë¤. 무í ë°ë³µë¬¸ì ì¬í ë°ë³µë¬¸ê³¼ ë§ì°¬ê°ì§ë¡ break ì§ìì를 ì¬ì©í´ ë©ì¶ ì ììµëë¤.
íì¬ ì¤í ì¤ì¸ ë°ë³µìì ëë 무ì¸ê°ë¥¼ íì§ ìê³ ë¤ì ë°ë³µì¼ë¡ ëì´ê°ê³ ì¶ë¤ë©´ continue ì§ìì를 ì¬ì©í ì ììµëë¤.
ë°ë³µë¬¸ ìì ë ì´ë¸ì ë¶ì´ê³ , break/continueì ì´ ë ì´ë¸ì í¨ê» ì¬ì©í ì ììµëë¤. ë ì´ë¸ì ì¤ì²© ë°ë³µë¬¸ì ë¹ ì ¸ëì ë°ê¹¥ì ë°ë³µë¬¸ì¼ë¡ ê° ì ìê² í´ì£¼ë ì ì¼í ë°©ë²ì
ëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.