ë¤ìì 기본ì ì¸ ê³ì°ììë¶í° ìë£í´ì¼ í ë¹ì·í ìì ë¤ì ê°ì§ê³ ìë ìí©ë¤ì ëí´ìê¹ì§, íë¡ê·¸ëë° ì¸ì´ë ë°ë³µì ì¸ ìì ì ë¹ ë¥´ê² ìë£íë ë° ëë¨í ì ì©í©ëë¤. ì¬ê¸°ì ì°ë¦¬ë ê·¸ë¬í íì를 ë¤ë£¨ë JavaScriptìì ì´ì© ê°ë¥í ë°ë³µë¬¸ 구조를 ì´í´ë³¼ ê²ì ëë¤.
íìí ì¬ì ì§ì: 기본ì ì¸ ì»´í¨í° íì© ë¥ë ¥, HTMLê³¼ CSS, JavaScript 첫걸ì. 목í: JavaScriptìì ë°ë³µë¬¸(loop)ì ì¬ì©íë ë°©ë²ì ì´í´í©ëë¤. ì 를 ë°ë³µ ìì ê³ì ì¡ì ëì¸ìë°ë³µ, ë°ë³µ, ë°ë³µ(loop). ì¸ê¸°ìë ì침 ì리ì¼, ë¡¤ë¬ ì½ì¤í° ê·¸ë¦¬ê³ ìì ì ìê³¼ ì°ê´ëì´ ìë ê²ì²ë¼, ë°ë³µì ëí íë¡ê·¸ëë°ìì ì¤ìí ê°ë ì ëë¤. íë¡ê·¸ëë°ì ë°ë³µì ê°ì ê²ì ê³ì ê·¸ë¦¬ê³ ê³ì ë°ë³µí´ì íë ê²ì 모ë ê´ê³ê° ìëë°, ì´ë íë¡ê·¸ëë° ì¸ì´ìì ë°ë³µ(iteration)ì´ë¼ê³ ì¼ì»«ì´ì§ëë¤.
ê°ì¡±ë¤ì´ ì¼ì£¼ì¼ëì 먹ì ìëì´ ì¶©ë¶íì§ íì í기 ìí´ ê³ ë¯¼íë ëë¶ì ìí©ì ë´ ìë¤. ê·¸ë ì´ê²ì ì기 ìí´ ë¤ìê³¼ ê°ì ë°ë³µì ì¬ì©í ì§ë ëª¨ë¦ ëë¤:
ë°ë³µì ë³´íµ ë¤ì 기ë¥ì íë ëë ê·¸ ì´ìì ê°ì§ëë¤:
ìì¬ ì½ë(pseudocode)ìì ì´ê²ì ë¤ìê³¼ ê°ì´ ë³´ì¼ ê²ì ëë¤:
loop(food = 0; foodNeeded = 10) { if (food = foodNeeded) { exit loop; // ì°ë¦¬ë ì¶©ë¶í ììì ê°ì§ê³ ìë¤; ì§ì ëìê°ì } else { food += 2; // 2ì¸ë¶ì ë 모ì¼ê¸° ìí´ 1ìê°ì ì모íë¤ // ê·¸ë¦¬ê³ ë°ë³µë¬¸ì ë¤ì ì¤íë ê²ì ëë¤ } }
ë°ë¼ì íìí ììì ìì 10ì¼ë¡ ì¤ì ëì´ ìê³ , íì¬ ëë¶ê° ìì§íê³ ìë ìì 0ì¼ë¡ ì¤ì ëì´ ììµëë¤. ë°ë³µë¬¸ì ê° ë°ë³µìì, ì°ë¦¬ë ëë¶ê° ê°ì§ ììì ìì´ ê·¸ê° íìí ìë³´ë¤ í¬ê±°ë ê°ìì§ íì¸í©ëë¤. ë§ì½ ê·¸ë ë¤ë©´, ì°ë¦¬ë ë°ë³µë¬¸ì ì¢ ë£(exit)í ì ììµëë¤. ë§ì½ ê·¸ë ì§ ìë¤ë©´, ëë¶ë 2ì¸ë¶ì ììì 모ì¼ê¸° ìí´ í ìê°ì ë³´ë´ê³ ë°ë³µë¬¸ì ë¤ì ì¤íë©ëë¤.
ì êµ³ì´?ì´ ìì ìì, ì¬ë¬ë¶ì ìë§ë ë°ë³µë¬¸ ë¤ì ìë ê³ ê¸ ê°ë ì ì´í´íì ê²ì´ì§ë§, ì¬ë¬ë¶ì ìë§ë "ì¢ì, íë¥íêµ°, íì§ë§ ì´ë»ê² ì´ê² ë´ê° JavaScript ì½ë를 ë ì ì§ê² ëìì¤ë¤ë ê±°ì§?" ë¼ê³ ìê°í ê²ì ëë¤. ìì ë§íë¯ì´, ë°ë³µë¬¸ì ê°ì ê²ì ê³ì ê·¸ë¦¬ê³ ê³ì ë¤ì íë ê²ì 모ë ê´ë ¨ì´ ìëë°, ì´ë ë¹ ë¥´ê² ë°ë³µì ì¸ ì¼ì ìë£íë ë° ë°ì´ë©ëë¤.
ì¢ ì¢ , ì½ëë ë°ë³µë¬¸ì ê°ê°ì ì°ì´ì ë°ë³µìì ì¡°ê¸ ë¤ë¥¼ ê²ì¸ë°, ì´ë ì¬ë¬ë¶ì´ ë¹ì·íì§ë§ ì¡°ê¸ ë¤ë¥¸ ì¼ë미를 ìë£í ì ìë¤ë ê²ì ì미í©ëë¤; ë§ì½ ì¬ë¬ë¶ì´ ìíí ë§ì ë¤ë¥¸ ê³ì°ë¤ì ê°ì§ê³ ìë¤ë©´, ì¬ë¬ë¶ì ê°ì ê²ì ê³ì ê·¸ë¦¬ê³ ê³ì íë ê²ì´ ìëë¼, ê°ê°ì ë¤ë¥¸ ê²ì í기를 ìí ê²ì ëë¤.
ì ë°ë³µë¬¸ì´ ê·¸ë ê² ì¢ì ê²ì¸ì§ë¥¼ ìë²½í ë³´ì¬ì£¼ë ìì 를 ë´
ìë¤. ì°ë¦¬ê° <canvas>
ìì ìì 무ììì ì 100ê°ë¥¼ ê·¸ë¦¬ê³ ì¶ë¤ê³ 칩ìë¤ (ìì 를 ë¤ì ì¤ííê³ , ë¤ì ë¤ë¥¸ 무ìì ì§í©ë¤ì 보기 ìí´ Updateë²í¼ì ë르ì¸ì):
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Random canvas circles</title>
<style>
html {
width: 100%;
height: inherit;
background: #ddd;
}
canvas {
display: block;
}
body {
margin: 0;
}
button {
position: absolute;
top: 5px;
left: 5px;
}
</style>
</head>
<body>
<button>Update</button>
<canvas></canvas>
<script>
const btn = document.querySelector("button");
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
let WIDTH = document.documentElement.clientWidth;
let HEIGHT = document.documentElement.clientHeight;
canvas.width = WIDTH;
canvas.height = HEIGHT;
function random(number) {
return Math.floor(Math.random() * number);
}
function draw() {
ctx.clearRect(0, 0, WIDTH, HEIGHT);
for (let i = 0; i < 100; i++) {
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
}
}
btn.addEventListener("click", draw);
</script>
</body>
</html>
ì§ê¸ ë¹ì¥ì 모ë ì½ë를 ì´í´í íìë ìì§ë§, ì¤ì ë¡ 100ê°ì ìì 그리ë ì½ë ë¶ë¶ì ì´í´ë´ ìë¤:
for (let i = 0; i < 100; i++) {
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
}
random()
ì, 0
ê³¼ x-1
ì¬ì´ì ì ì를 ë°íí©ëë¤.WIDTH
ì HEIGHT
ë ë´ë¶ ë¸ë¼ì°ì ìëì°ì ëë¹ì ëì´ì
ëë¤.기본 ê°ë ì ì¡ìì¼ë§ í©ëë¤ â ì°ë¦¬ë ì´ ì½ëì 100ë²ì ë°ë³µ(iteration)ì ì¤íí기 ìí´ ë°ë³µë¬¸ì ì¬ì©íê³ ìëë°, ê° ë°ë³µì íì´ì§ì 무ììì ìì¹ì ìì 그립ëë¤. ì°ë¦¬ê° 100ê°ì ìì 그리ë , 1000ê°ì ìì 그리ë , í¹ì 10,000ê°ì ìì 그리ë ê°ì íìí ì½ëì ìì ê°ì ê²ì ëë¤. ì¤ì§ ì«ì íëë§ ë°ëë©´ ë©ëë¤.
ë§ì½ ì°ë¦¬ê° ì¬ê¸°ì ë°ë³µë¬¸ì ì¬ì©íì§ ììë¤ë©´, ì°ë¦¬ê° ê·¸ë¦¬ê³ ì¶ì 모ë ìì ëí´ ë¤ìì ì½ë를 ë°ë³µí´ì¼ë§ íì ê²ì ëë¤:
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
ì´ê²ì 몹ì ì§ë£¨íê³ ì주 ë¹ ë¥´ê² ì ì§ë³´ìí기 íë¤ ê²ì ëë¤. ë°ë³µë¬¸ì ì ë§ë¡ ìµê³ ì ëë¤.
ë°ë³µë¬¸ì íì¤ëªëª í¹ì í ë°ë³µë¬¸ 구조 í구를 ììí´ ë´ ìë¤. ì¬ë¬ë¶ì´ ëë¶ë¶ì ê²½ì°ì ì¬ì©íê² ë , 첫ë²ì§¸ë for ë°ë³µë¬¸ì ëë¤. ì´ê²ì ë¤ìì 문ë²(syntax)ì ê°ì§ê³ ììµëë¤:
for (ì´ê¸°íì; ì¢ ë£ ì¡°ê±´; ì¦ê°ì) { // ì¤íí ì½ë }
ì¬ê¸°ì ì°ë¦¬ê° ì ì ìë ê²:
ê´í¸ê° ë¤ë°ë¼ì¤ë í¤ìë for
.
ê´í¸ ììë, ì¸ë¯¸ì½ë¡ ì¼ë¡ 구ë¶ëë, ì¸ê°ì íëª©ì´ ììµëë¤:
true
ê° ìë ì§ì ì ê°ê¹ìì§ê² í기 ìí´ ì ê³µë©ëë¤.ì½ë ë¸ëì ê°ì¸ë ì¤ê´í¸ â ì´ ì½ëë ë°ë³µë¬¸ì´ ë°ë³µë ëë§ë¤ ì¤íë ê²ì ëë¤.
ì´ê²ë¤ì´ 무ìì íëì§ë¥¼ ëì± íì¤íê² ìê°íí ì ìëë¡ ì¤ì ìì 를 ë´ ìë¤.
const cats = ["Bill", "Jeff", "Pete", "Biggles", "Jasmin"];
let info = "My cats are called ";
const para = document.querySelector("p");
for (let i = 0; i < cats.length; i++) {
info += cats[i] + ", ";
}
para.textContent = info;
ì´ê²ì ì°ë¦¬ìê² ë¤ìì 결과를 ë³´ì¬ì¤ëë¤:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Basic for loop example</title>
<style></style>
</head>
<body>
<p></p>
<script>
const cats = ["Bill", "Jeff", "Pete", "Biggles", "Jasmin"];
let info = "My cats are called ";
const para = document.querySelector("p");
for (let i = 0; i < cats.length; i++) {
info += cats[i] + ", ";
}
para.textContent = info;
</script>
</body>
</html>
ì°¸ê³ : ì¬ë¬ë¶ì ì´ ìì 를 GitHubìì ëí ì°¾ì ì ììµëë¤ (ëí ì¤ì ë¡ ìëíë 모ìµë ë³¼ ì ììµëë¤).
ì´ê²ì ë°ë³µë¬¸ì´ ë°°ì´ ìì ììë¤ì ëí´ ë°ë³µíê³ ê·¸ ê°ê°ì ììë¤ê³¼ 무ì¸ê°ë¥¼ í기 ìí´ ì°ìë¤ë ê²ì ë³´ì¬ì¤ëë¤ â ì´ê²ì JavaScriptìì ì주 ì¼ë°ì ì¸ í¨í´ì ëë¤. ì¬ê¸°ì:
ì¹´ì´í° ë³ì (ëëë¡ ì´ê¸°íì(initializer) ëë ë°ë³µ ë³ì(iteration variable)ì¼ë¡ë ìë ¤ì ¸ ìì) i
ë 0
ìì ììí©ëë¤ (let i = 0
).
ë°ë³µë¬¸ì i
ê° ë ì´ì cats
ë°°ì´ì 길ì´(length)ë³´ë¤ ìì§ ìì ëê¹ì§ ì¤íëë¼ë ëª
ë ¹ì ë°ììµëë¤. ì´ê²ì ì¤ìí©ëë¤ â ì¡°ê±´ì ë°ë³µë¬¸ì´ ì¬ì í ì¤íëë ê² ìëì ì¡°ê±´ì
ëë¤. ê·¸ëì ì´ ê²½ì°, i < cats.length
ê° ì¬ì í trueì¸ ëì, ë°ë³µë¬¸ì ê³ì ì¤íë ê²ì
ëë¤.
ë°ë³µë¬¸ ììì, ì°ë¦¬ë 콤ë§ì 공백(space)ê³¼ ê°ì´ ìë íì¬ ë°ë³µ ìì(item) (cats[ì´ ë iê° ë¬´ìì´ë ]
ì¸, cats[i]
)를 info
ë³ìì ëì ì°ê²°ìíµëë¤. ê·¸ëì:
i = 0
ì´ë¯ë¡, cats[0] + ', '
(ì´ë Bill,
ê³¼ ê°ìµëë¤)ë info
ì ì°ê²°ë ê²ì
ëë¤.i = 1
ì´ë¯ë¡, cats[1] + ', '
(ì´ë Jeff,
ì ê°ìµëë¤)ë info
ì ì°ê²°ë ê²ì
ëë¤.i
ì 1ì´ ëí´ì§ ê²ì´ê³ (i++
), ì´ ê³¼ì (process)ì ë¤ì ì¤íë ê²ì
ëë¤.i
ê° cats.length
ì ê°ìì§ ë (ì´ ê²½ì°, 5), ë°ë³µë¬¸ì ë©ì¶ ê²ì´ê³ , ë¸ë¼ì°ì ë ë°ë³µë¬¸ ìëì ìë ë¤ì ì½ëë¡ ì´ëí ê²ì
ëë¤.
ì°¸ê³ : ì°ë¦¬ë ì¡°ê±´ì i <= cats.length
ì´ ìëë¼ i < cats.length
ë¡ ë§ë¤ìëë°, ì´ë ì»´í¨í°ë ì¹´ì´í¸ë¥¼ 1ë¶í°ê° ìëë¼ 0ë¶í° ì¸ê¸° ë문ì
ëë¤ â ì°ë¦¬ë i
를 0ìì ììíê³ , i = 4
ê¹ì§ ê°ìµëë¤ (ë§ì§ë§ ë°°ì´ ììì ì¸ë±ì¤). ë°°ì´ì 5ê°ì ììê° ìì¼ë¯ë¡, cats.length
ë 5를 ë°ííì§ë§, ì°ë¦¬ë i = 5
ê¹ì§ ê°ê³ ì¶ì§ë ììµëë¤. ìëíë©´ ì´ë ë§ì§ë§ ììì ëí´ undefined
를 ë°íí ê²ì´ê¸° ë문ì
ëë¤ (5ì ì¸ë±ì¤ë¥¼ ê°ì§ ë°°ì´ ììë ììµëë¤). ê·¸ëì, ê·¸ë¬ë¯ë¡, ì°ë¦¬ë cats.length
ê³¼ ê°ì ë°ê¹ì§ê° ìëë¼ (i <=
), cats.length
ë³´ë¤ 1 ìì ë°ê¹ì§ ê°ê¸°ë¥¼ ìí©ëë¤ (i <
).
ì°¸ê³ : ì¡°ê±´ì ê´ë ¨ë ì¼ë°ì ì¸ ì¤ìë "ë³´ë¤ ìê±°ë ê°ë¤(less than or equal to)" (<=
)ê° ìëë¼ "ëë±(equal to)" (===
)ì ì¬ì©íë ê²ì
ëë¤. ë§ì½ ì°ë¦¬ê° ë°ë³µë¬¸ì i = 5
ê¹ì§ ì¤íí기를 ìíë¤ë©´, ì¢
ë£ ì¡°ê±´ì i <= cats.length
ì¼ íìê° ììì ê²ì
ëë¤. ë§ì½ ì°ë¦¬ê° ê·¸ê²ì i === cats.length
ì ì¤ì íë¤ë©´, 첫 ë°ë³µë¬¸ ë°ë³µìì i
ë 5
ì ê°ì§ ììì, ë°ë³µë¬¸ì ì¦ì ë©ì·ì ê²ì´ê¸° ë문ì ë°ë³µë¬¸ì ì í ì¤íëì§ ìì ê²ì
ëë¤.
ì°ë¦¬ë ë§ì§ë§ì¼ë¡ ì¶ë ¥ëë 문ì¥ì´ ì ë§ë¤ì´ì§ì§ ììë¤ë ìì 문ì 를 ê°ì§ê³ ììµëë¤:
My cats are called Bill, Jeff, Pete, Biggles, Jasmin,
ì´ìì ì¼ë¡, ì°ë¦¬ë 문ì¥ì ëì 콤ë§ë¥¼ ê°ì§ì§ ìëë¡ ë§ì§ë§ ë°ë³µë¬¸ ë°ë³µìì ì°ê²°ì ë³ê²½í기를 ìí©ëë¤. ì¢ìµëë¤, 문ì ìì´ì â ì°ë¦¬ë 꽤 íë³µíê² ë°ë³µë¬¸ì´ ì´ í¹ë³í ê²½ì°ë¥¼ ë¤ë£¨ëë¡ ì¡°ê±´ë¬¸ì ë´ë¶ì ì½ì í ì ììµëë¤:
for (let i = 0; i < cats.length; i++) {
if (i === cats.length - 1) {
info += "and " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
}
ì°¸ê³ : ì¬ë¬ë¶ì ì´ ìì ì½ë를 Githubìì ëí ì°¾ìë³¼ ì ììµëë¤ (ëí ì¤ì ë¡ ìëíë 모ìµë ë³¼ ì ììµëë¤).
breakë¡ ë°ë³µë¬¸ ì¢ ë£íê¸°ê²½ê³ : ì¤ì: 모ë ë°ë³µë¬¸ê³¼ ë§ì°¬ê°ì§ë¡ â for 문ìì, ì´ê¸°íì(initializer)ì´ ê²°êµ ì¡°ê±´ì´ trueê° ìë ì§ì ì ë¿ëë¡, ê²½ì°ì ë°ë¼, ì¦ê°ëê±°ë í¹ì ê°ìëê² í´ì¼ë§ í©ëë¤. ë§ì½ ê·¸ë ì§ ìë¤ë©´, ë°ë³µë¬¸ì ììí ê³ìë ê²ì´ê³ , ë¸ë¼ì°ì ê° ê°ì ë¡ ë©ì¶ê² íê±°ë, ë¸ë¼ì°ì ê° ë©ì¶(crash) ê²ì ëë¤. ì´ê²ì 무í 루í(infinite loop)ë¼ê³ ë¶ë¦½ëë¤.
ë§ì½ ì¬ë¬ë¶ì´ 모ë ë°ë³µì´ ìë£ë기 ì ì ë°ë³µë¬¸ì ì¢
ë£íê³ ì¶ë¤ë©´, ì¬ë¬ë¶ì break문ì ì¬ì©í ì ììµëë¤. ì°ë¦¬ë ì´ë¯¸ ì´ê²ì ì§ë 문ììì switch문ì ì´í´ë³¼ ë ë§ë¬ìµëë¤ â ì
ë ¥ ííìê³¼ ì¼ì¹íë switch문ìì caseê° ì¶©ì¡±ëìì ë, break
문ì ì¦ì switch문ì ì¢
ë£íê³ switch문 ë¤ìì ìë ì½ëë¡ ì´ëí©ëë¤.
ì´ê²ì ë°ë³µë¬¸ê³¼ ê°ì ê²ì
ëë¤ â break
문ì ì¦ì ë°ë³µë¬¸ì ì¢
ë£íê³ ë¸ë¼ì°ì ê° ë°ë³µë¬¸ ë¤ì ìë ì½ëë¡ ì´ëíê² í©ëë¤.
ì°ë¦¬ê° ì°ë½ì²ì í¸ëí° ë²í¸ì ë°°ì´ì íìíê³ ì°ë¦¬ê° ìíë ë°ë¡ ê·¸ ë²í¸ë¥¼ ë°ííê³ ì¶ë¤ê³ í©ìë¤. 첫째ë¡, ê°ë¨í HTML â ì°¾ê³ ì íë ì´ë¦ì ì
ë ¥í ì ìê² í´ ì£¼ë í
ì¤í¸ <input>
, ê²ìì ì ì¶í <button>
ìì, ê·¸ë¦¬ê³ ê²°ê³¼ë¥¼ íìí <p>
ìì:
<label for="search">Search by contact name: </label>
<input id="search" type="text" />
<button>Search</button>
<p></p>
ì´ì JavaScript를 ë´ ìë¤:
const contacts = [
"Chris:2232322",
"Sarah:3453456",
"Bill:7654322",
"Mary:9998769",
"Dianne:9384975",
];
const para = document.querySelector("p");
const input = document.querySelector("input");
const btn = document.querySelector("button");
btn.addEventListener("click", function () {
let searchName = input.value;
input.value = "";
input.focus();
for (let i = 0; i < contacts.length; i++) {
let splitContact = contacts[i].split(":");
if (splitContact[0] === searchName) {
para.textContent =
splitContact[0] + "'s number is " + splitContact[1] + ".";
break;
} else {
para.textContent = "Contact not found.";
}
}
});
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Simple contact search example</title>
<style></style>
</head>
<body>
<label for="search">Search by contact name: </label>
<input id="search" type="text" />
<button>Search</button>
<p></p>
<script>
const contacts = [
"Chris:2232322",
"Sarah:3453456",
"Bill:7654322",
"Mary:9998769",
"Dianne:9384975",
];
const para = document.querySelector("p");
const input = document.querySelector("input");
const btn = document.querySelector("button");
btn.addEventListener("click", function () {
let searchName = input.value;
input.value = "";
input.focus();
for (let i = 0; i < contacts.length; i++) {
let splitContact = contacts[i].split(":");
if (splitContact[0] === searchName) {
para.textContent =
splitContact[0] + "'s number is " + splitContact[1] + ".";
break;
} else if (i === contacts.length - 1)
para.textContent = "Contact not found.";
}
});
</script>
</body>
</html>
ì°ì ì°ë¦¬ë ëª ê°ì§ ë³ì ì ì를 í©ëë¤ â ì°ë¦¬ë ì½ë¡ ì¼ë¡ ë¶ë¦¬ë ì´ë¦ê³¼ í¸ëí° ë²í¸ë¥¼ í¬í¨íê³ ìë ê°ê°ì 문ìì´ ìì를 ê°ì§ê³ ìë, ì°ë½ì² ì ë³´ì ë°°ì´ì ê°ì§ê³ ììµëë¤.
ë¤ìì¼ë¡, ë²í¼ì´ ëë ¸ì ë ê²ìì ìííê³ ê²°ê³¼ë¥¼ ë°íí기 ìí´ ì½ëê° ì¤íëëë¡ ë²í¼(btn
)ì ì´ë²¤í¸ 리ì¤ë를 ë¶ì
ëë¤.
ë¤ì ê²ìì ì¤ë¹ë¥¼ ìí´, í
ì¤í¸ ì¸íì ë¹ì°ê³ ê·¸ê²ì ë¤ì í¬ì»¤ì±í기 ì ì, ì°ë¦¬ë searchName
ë³ìì í
ì¤í¸ ì¸íì ì
ë ¥ë ê°ì ì ì¥í©ëë¤. ê²ìì´ ëì문ì 구ë¶ì´ ìëë¡(case-insensitive) ì°ë¦¬ê° ëí toLowerCase()
ë©ìë를 문ìì´ì ì¤ííë¤ë ê²ì 주목íì¸ì.
ì´ì for ë°ë³µë¬¸ì í¥ë¯¸ë¡ì´ ì ì ë´ ìë¤:
0
ìì ì¹´ì´í°ë¥¼ ììíê³ , ì¹´ì´í°ê° contacts.length
ë³´ë¤ ë ì´ì ìì§ ìì ëê¹ì§ ë°ë³µë¬¸ì ì¤íìí¤ê³ , ê·¸ë¦¬ê³ i
를 ë°ë³µë¬¸ì ê° ë°ë³µ íë§ë¤ 1ì© ì¦ê°ìíµëë¤.contacts[i]
)를 ì½ë¡ 문ììì ëëê³ (split), ê²°ê³¼ì¸ ë ê°ì splitContact
ë°°ì´ì ì ì¥íìµëë¤.splitContact[0]
(ì°ë½ì²ì ì´ë¦, ë¤ì ì기íìë©´ toLowerCase()
ë¡ ì문ìí(lower-cased)ë)ì´, ì
ë ¥ë searchName
ê³¼ ê°ìì§ë¥¼ ê²ì¬íë 조건문ì ì¬ì©íìµëë¤. ë§ì½ ê·¸ë ë¤ë©´, ì°ë¦¬ë ì°ë½ì²ì ë²í¸ê° 무ìì¸ì§ë¥¼ ì리ë 문ìì´ì 문ë¨ì ì
ë ¥íê³ , ë°ë³µë¬¸ì ëë´ê¸° ìí´ break
ì ì¬ì©í©ëë¤.(contacts.length-1)
ë°ë³µ íì, ë§ì½ ì°ë½ì² ì´ë¦ì´ ì
ë ¥ë ê²ìê³¼ ì¼ì¹íì§ ìì¼ë©´ ë¬¸ë¨ í
ì¤í¸ë "Contact not found."ë¡ ì¤ì ëê³ , ë°ë³µë¬¸ì ì¡°ê±´ì´ ë ì´ì trueê° ìë ëê¹ì§ ë°ë³µì ê³ìí©ëë¤.
ì°¸ê³ : ì°¸ê³ : ì¬ë¬ë¶ì ì ì²´ ìì¤ ì½ë를 GitHubìì ëí ë³¼ ì ììµëë¤ (ëí ì¤ì ë¡ ìëíë 모ìµë ë³¼ ì ììµëë¤).
Continueë¡ ë°ë³µ ê±´ëë°ê¸°continue문ì break
ì ì ì¬í ë°©ìì¼ë¡ ìëíì§ë§, ë°ë³µë¬¸ì ìì í íì¶íë ëì , ì´ê²ì ë°ë³µë¬¸ì ë¤ì ë°ë³µì¼ë¡ ê±´ëëëë¤. ì«ì를 ì
ë ¥ì¼ë¡ ì·¨íê³ , ì¤ì§ ì ìì ì ê³±ì¸ ìë§ì ë°ííë ë¤ë¥¸ ìì 를 ë´
ìë¤.
HTMLì 기본ì ì¼ë¡ ì§ë ìì ì ê°ìµëë¤ â ê°ë¨í í ì¤í¸ ì ë ¥, ê·¸ë¦¬ê³ ì¶ë ¥ì ìí 문ë¨. JavaScriptë ëë¶ë¶ ëí ê°ì§ë§, ë°ë³µë¬¸ ìì²´ë ì½ê° ë¤ë¦ ëë¤:
let num = input.value;
for (let i = 1; i <= num; i++) {
let sqRoot = Math.sqrt(i);
if (Math.floor(sqRoot) !== sqRoot) {
continue;
}
para.textContent += i + " ";
}
ì¬ê¸° ì¶ë ¥ì´ ììµëë¤:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Integer squares generator</title>
<style></style>
</head>
<body>
<label for="number">Enter number: </label>
<input id="number" type="text" />
<button>Generate integer squares</button>
<p>Output:</p>
<script>
const para = document.querySelector("p");
const input = document.querySelector("input");
const btn = document.querySelector("button");
btn.addEventListener("click", function () {
para.textContent = "Output: ";
let num = input.value;
input.value = "";
input.focus();
for (let i = 1; i <= num; i++) {
let sqRoot = Math.sqrt(i);
if (Math.floor(sqRoot) !== sqRoot) {
continue;
}
para.textContent += i + " ";
}
});
</script>
</body>
</html>
num
)ì¬ì¼ í©ëë¤. for
ë°ë³µë¬¸ì 1ìì ììíë ì¹´ì´í° (ì°ë¦¬ë ì´ ê²½ì°ìì 0ì ê´ì¬ì´ ìì¼ëê¹ì), ì¹´ì´í°ê° ì
ë ¥ num
ë³´ë¤ ë í¬ê² ëìì ë ë°ë³µë¬¸ì´ ë©ì¶ë¤ê³ ë§íë ì¢
ë£ ì¡°ê±´, ê·¸ë¦¬ê³ ë§¤ë² ì¹´ì´í°ì 1ì ëíë ë°ë³µìê° ì£¼ì´ì ¸ ììµëë¤.!==
), ì´ê²ì ì ê³±ê·¼ì´ ì ìê° ìëë¼ë ê²ì ì미íë¯ë¡, ì°ë¦¬ë ì´ê²ì ê´ì¬ì´ ììµëë¤. ê·¸ë¬í ê²½ì°ì, ì°ë¦¬ë ì«ì를 ì´ëìë 기ë¡íë ì¼ ìì´ ë¤ì ë°ë³µë¬¸ ë°ë³µì¼ë¡ ê±´ëë°ê¸° ìí´ continue
문ì ì¬ì©í©ëë¤.continue
ë¬¸ì´ ì¤íëì§ ìëë¡ ì§ë if
ë¸ë¡ì ìì í ê±´ëëëë¤; ëì , ì°ë¦¬ë íì¬ i
ê° + 공백ì ë¨ë½ ì½í
ì¸ ì ëì ì°ê²°í©ëë¤.ì°¸ê³ : ì¬ë¬ë¶ì ì ì²´ ìì¤ ì½ë를 GitHubìì ëí ë³¼ ì ììµëë¤ (ëí ì¤ì ë¡ ìëíë 모ìµë ë³¼ ì ììµëë¤).
while ê·¸ë¦¬ê³ do ... whilefor
ë JavaScriptìì ì¬ì©í ì ìë ì ì¼í ì íì ë°ë³µë¬¸ì´ ìëëë¤. ì¤ì ë¡ ë§ì ë¤ë¥¸ ê²ë¤ì´ ìê³ , ì§ê¸ ì´ ëª¨ë ê²ì ì´í´í íìë ìë ë°ë©´ ì¬ë¬ë¶ì´ ì½ê° ë¤ë¥¸ ë°©ìì¼ë¡ ìì
ìì ê°ì 기ë¥ì ì¸ìí ì ìëë¡ ë¤ë¥¸ ë ê°ì 구조를 ì´í´ ë³¼ ê°ì¹ê° ììµëë¤.
먼ì while ë°ë³µë¬¸ì ì´í´ë´ ìë¤. ì´ ë°ë³µë¬¸ì 구문ì ë¤ìê³¼ ê°ìµëë¤:
ì´ê¸°íì while (ì¢ ë£ ì¡°ê±´) { // ì¤íí ì½ë ì¦ê°ì }
ì´ê¸°íì ë³ìì ì¦ê°ìì´ ê´í¸ ìì í¬í¨ëì´ ìë ê²ì´ ìëë¼, ì´ê¸°íì ë³ìê° ë°ë³µë¬¸ ì ì ì¤ì ëì´ ìë¤ë ê²ê³¼, ì¦ê°ìì´ ë°ë³µë¬¸ ìì ì¤íí ì½ë íì í¬í¨ëì´ ìë¤ë ê²ì ì ì¸íê³ , ì´ê²ì for
ë°ë³µë¬¸ê³¼ ì주 ë¹ì·í ë°©ìì¼ë¡ ìëí©ëë¤. ì¡°ê±´ì ê´í¸ ìì í¬í¨ëì´ ìê³ , for
ëì while
í¤ìëê° ìì ìµëë¤.
ê°ì ì¸ ê°ì§ ììê° ì¬ì í ì¡´ì¬íê³ , ì´ê²ë¤ì for ë°ë³µë¬¸ììì²ë¼ ì¬ì í ê°ì ììë¡ ì ìëì´ ììµëë¤. ì¬ì í ì¹´ì´í° ë³ìê° ì¡°ê±´ì´ ë ì´ì trueê° ìë ì§ì ì ëë¬íëì§ë¥¼ íì¸í기 ì ì ì ìë ì´ê¸°íìì ê°ì§ê³ ìì´ì¼ë§ íë¯ë¡ ì´ê²ì ë§ì´ ë©ëë¤. ë°ë³µë¬¸ ìì ì½ëê° ì¤íë ì´íì ì¦ê°ìì ê·¸ë¦¬ê³ ì ì¤íëëë° (ë°ë³µì ìë£ëììµëë¤), ì´ë ì¤ì§ ì¡°ê±´ì´ ì¬ì í ì°¸ì¸ ê²½ì°ìë§ ì¼ì´ë©ëë¤.
ê³ ìì´ ëª©ë¡ ìì 를 ë¤ì ë´ ë´ ìë¤. íì§ë§ while ë°ë³µë¬¸ì ì¬ì©í기 ìí´ ì¬ìì±ëììµëë¤:
let i = 0;
while (i < cats.length) {
if (i === cats.length - 1) {
info += "and " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
i++;
}
ì°¸ê³ : ììí ëë¡ ì´ê²ì ì¬ì í ëê°ì´ ëìí©ëë¤ â ì¬ê¸°ì í ë² ë´ ë³´ì¸ì running live on GitHub (ëí ì ì²´ ìì¤ ì½ëë ë³´ì¸ì).
do...while ë°ë³µë¬¸ì ë§ì´ ë¹ì·íì§ë§ while 구조ì ë³íì ì ê³µí©ëë¤:
ì´ê¸°íì do { // ì¤íí ì½ë ì¦ê°ì } while (ì¢ ë£ ì¡°ê±´)
ì´ ê²½ì°, ë°ë³µë¬¸ì´ ììí기 ì ì, ì´ê¸°íìì ë¤ì 첫ë²ì§¸ë¡ ìµëë¤. í¤ìëë ê³§ì¥ ì¤íí ì½ëì ì¦ê°ìì í¬í¨íë ì¤ê´í¸ì ìì ììµëë¤.
ì¬ê¸°ì ì°¨ë³í ììë ì¡°ê±´ì´ ëª¨ë ê² ë¤ì ì¤ëë°, ê´í¸ì ê°ì¸ì ¸ ìê³ while
í¤ìëê° ìì ìë¤ë ì ì
ëë¤. do...while
ë°ë³µë¬¸ìì, ì¤ê´í¸ ìì ì½ëë ì´ê²ì´ ë¤ì ì¤íëì´ì¼ íëì§ë¥¼ 보기 ìí´ íì¸ì´ ë§ë¤ì´ì§ê¸° ì ì íì í ë²ì ì¤íë©ëë¤ (whileê³¼ forììë, íì¸ì´ 먼ì ìì, ì½ëë í¹ìë¼ë ì ëë¡ ì¤íë ì¼ì´ ììµëë¤).
do...while
ì ì¬ì©í기 ìí´ ê³ ìì´ ëª©ë¡ ìì 를 ë¤ì ìì±í´ ë´
ìë¤:
let i = 0;
do {
if (i === cats.length - 1) {
info += "and " + cats[i] + ".";
} else {
info += cats[i] + ", ";
}
i++;
} while (i < cats.length);
ì°¸ê³ : ë¤ì ë§íì§ë§, ì´ê²ì ììí ë°ì ê°ì´ ëê°ì´ ëìí©ëë¤ â í ë² ë´ ë³´ì¸ì running live on GitHub (ëí ì ì²´ ìì¤ ì½ëë ë³´ì¸ì).
ì§ì í´ë³´ê¸°: ì¹´ì´í¸ ë¤ì´ ìì!ê²½ê³ : ì¤ì: 모ë ë°ë³µë¬¸ê³¼ ë§ì°¬ê°ì§ë¡ â whileê³¼ do...while문ìì, ì¡°ê±´ì´ ê²°êµ falseê° ëëë¡, ê²½ì°ì ë°ë¼, ì´ê¸°íìì´ ì¦ê°ëê±°ë ê°ìëê² í´ì¼ë§ í©ëë¤.ë§ì½ ê·¸ë ì§ ìë¤ë©´, ë°ë³µë¬¸ì ììí ê³ìë ê²ì´ê³ , ë¸ë¼ì°ì ê° ê°ì ë¡ ë©ì¶ê² íê±°ë, ë¸ë¼ì°ì ê° ë©ì¶(crash) ê²ì ëë¤. ì´ê²ì 무í 루í(infinite loop)ë¼ê³ ë¶ë¦½ëë¤.
ì´ ì°ìµìì, ì°ë¦¬ë ì¬ë¬ë¶ì´ ê°ë¨í ë°ì¬ ì¹´ì´í¸ë¤ì´ì, 10ìì ë°ì¬ê¹ì§, ì¶ë ¥ ë°ì¤ì ì¶ë ¥í기를 ìí©ëë¤. 구체ì ì¼ë¡ ë§íë©´, ì°ë¦¬ë ì¬ë¬ë¶ì´ ë¤ìì í기를 ìí©ëë¤:
10ìì 0ê¹ì§ ë°ë³µíì¸ì. ì°ë¦¬ë ì¬ë¬ë¶ìê² ì´ê¸°íìì ì ê³µí©ëë¤ â let i = 10;
.
ê° ë°ë³µë§ë¤, ìë¡ì´ ë¨ë½ì ë§ë¤ê³ , ì°ë¦¬ê° const output = document.querySelector('.output');
를 ì¬ì©í´ ì íí, ì¶ë ¥ <div>
ì ì¶ê°íì¸ì. 주ìì, ì°ë¦¬ë ì¬ë¬ë¶ìê² ë°ë³µë¬¸ ë´ë¶ ì´ëê°ìì ì¬ì©ë íìê° ìë ì¸ ì¤ì ì½ë를 ì ê³µí©ëë¤.
const para = document.createElement('p');
â ìë¡ì´ ë¨ë½ì ë§ëëë¤.output.appendChild(para);
â ë¨ë½ì ì¶ë ¥ <div>
ì ì¶ê°í©ëë¤.para.textContent =
â ë±í¸ ê¸°í¸ ì´íì, ì°í(right-hand side)ì ì¬ë¬ë¶ì´ ì
ë ¥í ê²ê³¼ ê°ì í
ì¤í¸ë¥¼ ë¨ë½ ë´ë¶ì ë§ëëë¤.ë¤ë¥¸ ë°ë³µ ì«ìë ê·¸ ë°ë³µì ëí ë¨ë½ì ì
ë ¥ë ë¤ë¥¸ í
ì¤í¸ë¥¼ ì구í©ëë¤ (ì¬ë¬ë¶ì 조건문과 ë¤ìì para.textContent =
ì¤ì´ íìí ê²ì
ëë¤):
ë°ë³µì를 í¬í¨íë ê²ì ìì§ ë§ì¸ì! ê·¸ë¬ë, ì´ ìì ììë ì°ë¦¬ë ê° ë°ë³µë§ë¤ ì¹´ì´í¸ë¥¼ ìê° ìëë¼ ìëë¡ ì
ëë¤. ê·¸ë¬ë ì¬ë¬ë¶ì i++
를 ìíì§ ìì ê²ì
ëë¤ â ì´ë»ê² ìëë¡ ë°ë³µíì¤ ê±´ê°ì?
ì°¸ê³ : ë§ì½ ì¬ë¬ë¶ì´ ë°ë³µë¬¸ì íì´íí기 ììíë¤ë©´ (ì를 ë¤ì´ (while(i>=0)), ìì§ ì¢ ë£ ì¡°ê±´ì ì ë ¥íì§ ìì기 ë문ì ë¸ë¼ì°ì ë ë©ì¶(stuck) ì§ë ëª¨ë¦ ëë¤. ê·¸ë¬ë ì¡°ì¬íì¸ì. ì´ ë¬¸ì ì ëì²í기 ìí´ ì½ë를 주ìì ìì±íê³ , ìì±í ì´íì 주ìì ì ê±°í ì ììµëë¤.
ë§ì½ ì¤ìíë¤ë©´, ì¸ì ë ìì 를 "Reset" ë²í¼ì¼ë¡ 리ì í ì ììµëë¤. ë§ì½ ì ë§ë¡ ë§íë¤ë©´, ëµì 보기 ìí´ "Show solution"ì ë르ì¸ì.
Active learning<h2>Live output</h2>
<div class="output" style="height: 410px;overflow: auto;"></div>
<h2>Editable code</h2>
<p class="a11y-label">
Press Esc to move focus away from the code area (Tab inserts a tab character).
</p>
<textarea id="code" class="playable-code" style="height: 300px;width: 95%">
var output = document.querySelector('.output');
output.innerHTML = '';
// var i = 10;
// var para = document.createElement('p');
// para.textContent = ;
// output.appendChild(para);
</textarea>
<div class="playable-buttons">
<input id="reset" type="button" value="Reset" />
<input id="solution" type="button" value="Show solution" />
</div>
html {
font-family: sans-serif;
}
h2 {
font-size: 16px;
}
.a11y-label {
margin: 0;
text-align: right;
font-size: 0.7rem;
width: 98%;
}
body {
margin: 10px;
background: #f5f9fa;
}
var textarea = document.getElementById("code");
var reset = document.getElementById("reset");
var solution = document.getElementById("solution");
var code = textarea.value;
var userEntry = textarea.value;
function updateCode() {
eval(textarea.value);
}
reset.addEventListener("click", function () {
textarea.value = code;
userEntry = textarea.value;
solutionEntry = jsSolution;
solution.value = "Show solution";
updateCode();
});
solution.addEventListener("click", function () {
if (solution.value === "Show solution") {
textarea.value = solutionEntry;
solution.value = "Hide solution";
} else {
textarea.value = userEntry;
solution.value = "Show solution";
}
updateCode();
});
var jsSolution =
"var output = document.querySelector('.output');\noutput.innerHTML = '';\n\nvar i = 10;\n\nwhile(i >= 0) {\n var para = document.createElement('p');\n if(i === 10) {\n para.textContent = 'Countdown ' + i;\n } else if(i === 0) {\n para.textContent = 'Blast off!';\n } else {\n para.textContent = i;\n }\n\n output.appendChild(para);\n\n i--;\n}";
var solutionEntry = jsSolution;
textarea.addEventListener("input", updateCode);
window.addEventListener("load", updateCode);
// stop tab key tabbing out of textarea and
// make it write a tab at the caret position instead
textarea.onkeydown = function (e) {
if (e.keyCode === 9) {
e.preventDefault();
insertAtCaret("\t");
}
if (e.keyCode === 27) {
textarea.blur();
}
};
function insertAtCaret(text) {
var scrollPos = textarea.scrollTop;
var caretPos = textarea.selectionStart;
var front = textarea.value.substring(0, caretPos);
var back = textarea.value.substring(
textarea.selectionEnd,
textarea.value.length,
);
textarea.value = front + text + back;
caretPos = caretPos + text.length;
textarea.selectionStart = caretPos;
textarea.selectionEnd = caretPos;
textarea.focus();
textarea.scrollTop = scrollPos;
}
// Update the saved userCode every time the user updates the text area code
textarea.onkeyup = function () {
// We only want to save the state when the user code is being shown,
// not the solution, so that solution is not saved over the user code
if (solution.value === "Show solution") {
userEntry = textarea.value;
} else {
solutionEntry = textarea.value;
}
updateCode();
};
ì§ì í´ë³´ê¸°: ìë ëª©ë¡ ìì±
ì´ ì°ìµìì, ì°ë¦¬ë ì¬ë¬ë¶ì´ ë°°ì´ì ì ì¥ë ì´ë¦ 목ë¡ì ì·¨íê³ ê·¸ê²ì ìë ëª ë¨ì ë£ê¸°ë¥¼ ìí©ëë¤. íì§ë§ ì´ê²ì ì½ì§ ììµëë¤ â Philê³¼ Lolaë íìì¤ë½ê³ 무ë¡íê³ , íì 모ë ììì 먹기 ë문ì ì°ë¦¬ë Philê³¼ Lola를 목ë¡ì ë£ê³ ì¶ì§ ììµëë¤. ì°ë¦¬ë ë 목ë¡ì ê°ì§ê³ ìëë°, íëë ì¹ì¸í ìëë¤ì ìí ê²ì´ê³ íëë ê±°ì í ìëë¤ì ìí ê²ì ëë¤.
구체ì ì¼ë¡, ì°ë¦¬ë ì¬ë¬ë¶ì´ ë¤ìì í기를 ìí©ëë¤:
people
ë°°ì´ì 길ì´ê¹ì§ ë°ë³µíë ë°ë³µë¬¸ì ìì±íì¸ì. ì¬ë¬ë¶ì ì´ê¸°íì let i = 0;
ììë¶í° ììí íìê° ìì ê²ì´ì§ë§, ì¬ë¬ë¶ì ë¬´ì¨ ì¡°ê±´ì íìë¡ íëì?refused
ë¨ë½ì textContent
ì ëì 콤ë§ì 공백ì ë¶ì¬ ì°ê²°íì¸ì.admitted
ë¨ë½ì textContent
ì ëì 콤ë§ì 공백ì ë¶ì¬ ì°ê²°íì¸ì.ì°ë¦¬ë ì´ë¯¸ ì¬ë¬ë¶ìê² ë¤ìì ì ê³µíìµëë¤:
let i = 0;
â ì´ê¸°íì.refused.textContent +=
â 무ì¸ê°ë¥¼ refused.textContent
ì ëì ì°ê²°í ì¤ì ìì.admitted.textContent +=
â 무ì¸ê°ë¥¼ admitted.textContent
ì ëì ì°ê²°í ì¤ì ìì.ì¶ê° ë³´ëì¤ ì§ë¬¸ â ìì ì¼ì ì±ê³µì ì¼ë¡ ìë£í ì´íì, ì¬ë¬ë¶ì 콤ë§ë¡ ëë ì§ ë ì´ë¦ 목ë¡ì ê°ì§ê³ ìì ê²ì´ì§ë§, ê·¸ê²ë¤ì ë¨ì ì¹ ëª»í©ëë¤ â ê° ëª©ë¡ì ëì 콤ë§ê° ìì ê²ì ëë¤. ê° ê²½ì°ì ì´ë»ê² ë§ì§ë§ 콤ë§ë¥¼ ìë¼ë¸ ì¤ì ìì±íê³ , ëì ë§ì¹¨í를 ì¶ê°í ì§ ììë´ì¤ ì ìì¼ì ê°ì? ëìì ìí´ ì ì©í 문ìì´ ë©ìë 문ì를 í ë² ë´ ë³´ì¸ì.
ë§ì½ ì¤ìíë¤ë©´, ì¸ì ë ìì 를 "Reset" ë²í¼ì¼ë¡ 리ì í ì ììµëë¤. ë§ì½ ì ë§ë¡ ë§íë¤ë©´, ëµì 보기 ìí´ "Show solution"ì ë르ì¸ì.
<h2>Live output</h2>
<div class="output" style="height: 100px;overflow: auto;">
<p class="admitted">Admit:</p>
<p class="refused">Refuse:</p>
</div>
<h2>Editable code</h2>
<p class="a11y-label">
Press Esc to move focus away from the code area (Tab inserts a tab character).
</p>
<textarea id="code" class="playable-code" style="height: 400px;width: 95%">
const people = ['Chris', 'Anne', 'Colin', 'Terri', 'Phil', 'Lola', 'Sam', 'Kay', 'Bruce'];
const admitted = document.querySelector('.admitted');
const refused = document.querySelector('.refused');
admitted.textContent = 'Admit: ';
refused.textContent = 'Refuse: '
// let i = 0;
// refused.textContent += ;
// admitted.textContent += ;
</textarea>
<div class="playable-buttons">
<input id="reset" type="button" value="Reset" />
<input id="solution" type="button" value="Show solution" />
</div>
html {
font-family: sans-serif;
}
h2 {
font-size: 16px;
}
.a11y-label {
margin: 0;
text-align: right;
font-size: 0.7rem;
width: 98%;
}
body {
margin: 10px;
background: #f5f9fa;
}
const textarea = document.getElementById("code");
const reset = document.getElementById("reset");
const solution = document.getElementById("solution");
let code = textarea.value;
let userEntry = textarea.value;
function updateCode() {
eval(textarea.value);
}
reset.addEventListener("click", function () {
textarea.value = code;
userEntry = textarea.value;
solutionEntry = jsSolution;
solution.value = "Show solution";
updateCode();
});
solution.addEventListener("click", function () {
if (solution.value === "Show solution") {
textarea.value = solutionEntry;
solution.value = "Hide solution";
} else {
textarea.value = userEntry;
solution.value = "Show solution";
}
updateCode();
});
let jsSolution =
"const people = ['Chris', 'Anne', 'Colin', 'Terri', 'Phil', 'Lola', 'Sam', 'Kay', 'Bruce'];\n\nconst admitted = document.querySelector('.admitted');\nconst refused = document.querySelector('.refused');\n\nadmitted.textContent = 'Admit: ';\nrefused.textContent = 'Refuse: '\nlet i = 0;\n\ndo {\n if(people[i] === 'Phil' || people[i] === 'Lola') {\n refused.textContent += people[i] + ', ';\n } else {\n admitted.textContent += people[i] + ', ';\n }\n i++;\n} while(i < people.length);\n\nrefused.textContent = refused.textContent.slice(0,refused.textContent.length-2) + '.';\nadmitted.textContent = admitted.textContent.slice(0,admitted.textContent.length-2) + '.';";
let solutionEntry = jsSolution;
textarea.addEventListener("input", updateCode);
window.addEventListener("load", updateCode);
// stop tab key tabbing out of textarea and
// make it write a tab at the caret position instead
textarea.onkeydown = function (e) {
if (e.keyCode === 9) {
e.preventDefault();
insertAtCaret("\t");
}
if (e.keyCode === 27) {
textarea.blur();
}
};
function insertAtCaret(text) {
let scrollPos = textarea.scrollTop;
let caretPos = textarea.selectionStart;
let front = textarea.value.substring(0, caretPos);
let back = textarea.value.substring(
textarea.selectionEnd,
textarea.value.length,
);
textarea.value = front + text + back;
caretPos = caretPos + text.length;
textarea.selectionStart = caretPos;
textarea.selectionEnd = caretPos;
textarea.focus();
textarea.scrollTop = scrollPos;
}
// Update the saved userCode every time the user updates the text area code
textarea.onkeyup = function () {
// We only want to save the state when the user code is being shown,
// not the solution, so that solution is not saved over the user code
if (solution.value === "Show solution") {
userEntry = textarea.value;
} else {
solutionEntry = textarea.value;
}
updateCode();
};
ì´ë¤ ë°ë³µë¬¸ì ì¨ì¼ í ê¹?
기본ì ì¬ì©ì ëí´, for
, while
, ê·¸ë¦¬ê³ do...while
ë°ë³µë¬¸ë¤ì ëì²´ë¡ êµì²´í ì ììµëë¤. ì´ê²ë¤ì ê°ì 문ì 를 í기 ìí´ ëª¨ë ì°ì¬ì§ ì ìê³ , ì´ë¤ ê²ì ì¬ì©í ì§ë ì£¼ë¡ ì¬ë¬ë¶ì ê°ì¸ì ì¸ ì í¸ì ë¬ë ¤ ììµëë¤ â ì´ë¤ ê²ì´ ê°ì¥ 기ìµí기 ì½ê±°ë ì§ê´ì ì´ë¼ê³ ìê°íìëì. ì´ê²ë¤ì ë¤ì ì´í´ë´
ìë¤.
ì²«ì§¸ë¡ for
:
for (ì´ê¸°íì; ì¢ ë£ ì¡°ê±´; ì¦ê°ì) { // ì¤íí ì½ë }
while
:
ì´ê¸°íì while (ì¢ ë£ ì¡°ê±´) { // ì¤íí ì½ë ì¦ê°ì }
ê·¸ë¦¬ê³ ë§ì§ë§ì¼ë¡ do...while
:
ì´ê¸°íì do { ì¤íí ì½ë ì¦ê°ì } while (ì¢ ë£ ì¡°ê±´)
ì°ë¦¬ë, ì ì´ë ììíë ë°, for
를 ì¶ì²í©ëë¤. ìëíë©´ ì´ê²ì ìë§ë 모ë ê²ì 기ìµí기 ê°ì¥ ì½ê¸° ë문ì
ëë¤ â ì´ê¸°íì, ì¡°ê±´, ì¦ê°ì 모ëê° ê´í¸ ìì ê¹ëíê² ë¤ì´ê°ì¼ë§ íë¯ë¡, ì´ê²ë¤ì´ ì´ë ìëì§ ë³´ê³ ì¬ë¬ë¶ì´ ì´ê²ë¤ì ëì¹ì§ ììë¤ë ê²ì íì¸í기 ì½ìµëë¤.
ì°¸ê³ : ë¤ë¥¸ ë°ë³µë¬¸ íí/ê¸°ë¥ ëí ìëë°, ì´ë ê³ ê¸/í¹ìí ìí©ìì ì ì©íê³ ì´ ê¸ì ë²ì ë머ì ììµëë¤. ë§ì½ ë°ë³µë¬¸ì ë ë§ì´ ë°°ì°ê³ ì¶ë¤ë©´, ê³ ê¸ ë°ë³µë¬¸ê³¼ ë°ë³µ ê°ì´ë를 ì½ì´ ë³´ì¸ì.
ì¤ë ¥ì íê°í´ ë³´ì¸ì!ì´ ë¬¸ì를 ëê¹ì§ ì½ì¼ì ¨ì§ë§, ì¤ìí ê²ë¤ì ì¬ì í 기ìµíê³ ê³ì ê°ì? ë¤ì 문ì를 ì½ê¸° ì ì ì´ ë¬¸ìì ë´ì©ì ì íìµíê³ ì´í´íì ¨ëì§ íì¸íì¤ ì ììµëë¤ â ì¤ë ¥ì íê°í´ ë³´ì¸ì: ë°ë³µë¬¸.
ê²°ë¡ì´ 문ìë ì¬ë¬ë¶ìê² JavaScriptììì ë°ë³µë¬¸ì ëí 기본 ê°ë ê³¼ ì´ì© ê°ë¥í ë¤ë¥¸ ìµì ë¤ì ëë¬ë´ ë³´ììµëë¤. ì¬ë¬ë¶ì ì´ì ì ë°ë³µë¬¸ì´ ë°ë³µì ì¸ ì½ë를 ë¤ë£¨ë ë° ì¢ì ë©ì»¤ëì¦ì¸ì§ íì¤í ì´í´íê³ , ì¬ë¬ë¶ë§ì ìì ìì ê·¸ê²ë¤ì ì¬ì©íê³ ì¶ì´ì ëª¸ì´ ê·¼ì§ê±°ë¦¬ì¤ ê²ì ëë¤!
ë§ì½ ëë ì§ ì´í´íì§ ëª»í ê² ìë¤ë©´, ìì ë¡ê² ì´ ë¬¸ì를 ë¤ì ì½ê±°ë, 문ìí기ìì ëìì ìì²í´ ë³´ì¸ì.
ê°ì´ 보기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