í´ë¡ì ë ì£¼ë³ ìí(ì´íì íê²½)ì ëí 참조ì í¨ê» 묶ì¸(í¬í¨ë) í¨ìì ì¡°í©ì ëë¤. ì¦, í´ë¡ì ë ë´ë¶ í¨ììì ì¸ë¶ í¨ìì ë²ìì ëí ì ê·¼ì ì ê³µí©ëë¤. JavaScriptìì í´ë¡ì ë í¨ì ìì± ì í¨ìê° ìì±ë ëë§ë¤ ìì±ë©ëë¤.
ì´íì ë²ì ì§ì (Lexical scoping)ë¤ìì ê³ ë ¤í´ ë´ ìë¤.
function init() {
var name = "Mozilla"; // nameì initì ìí´ ìì±ë ì§ì ë³ìì´ë¤.
function displayName() {
// displayName() ì ë´ë¶ í¨ìì´ë©°, í´ë¡ì ë¤.
console.log(name); // ë¶ëª¨ í¨ììì ì ì¸ë ë³ì를 ì¬ì©íë¤.
}
displayName();
}
init();
init()
ì ì§ì ë³ì name
ê³¼ í¨ì displayName()
ì ìì±í©ëë¤. displayName()
ì init()
ìì ì ìë ë´ë¶ í¨ìì´ë©° init()
í¨ì 본문ììë§ ì¬ì©í ì ììµëë¤. ì¬ê¸°ì 주ìí ì ì displayName()
ë´ë¶ì ìì ë§ì ì§ì ë³ìê° ìë¤ë ì ì
ëë¤. ê·¸ë¬ë, ë´ë¶ í¨ììì ì¸ë¶ í¨ìì ë³ìì ì ê·¼í ì ì기 ë문ì, displayName()
ìì ë¶ëª¨ í¨ì init()
ìì ì ì¸ë ë³ì name
ì ì ê·¼í ì ììµëë¤.
ì´ JSFiddle ë§í¬ë¥¼ ì¬ì©íì¬ ì½ë를 ì¤ííê³ displayName()
í¨ì ë´ì console.log()
ë¬¸ì´ ì±ê³µì ì¼ë¡ ë¶ëª¨ í¨ì ë´ìì ì ì¸ë name
ê°ì íìíëì§ íì¸í©ëë¤.
ì´ê²ì í¨ìê° ì¤ì²©ë ë 구문 ë¶ìê¸°ê° ë³ì ì´ë¦ì íì¸íë ë°©ë²ì ì¤ëª íë 'ì ì ì¤ì½í'ì ììì ëë¤. ì¬ê¸°ì 'ì ì 'ì´ë, ì ì ë²ì ì§ì ê³¼ì ìì ë³ìê° ì´ëìì ì¬ì© ê°ë¥íì§ ì기 ìí´ ê·¸ ë³ìê° ìì¤ì½ë ë´ ì´ëìì ì ì¸ëìëì§ ê³ ë ¤íë¤ë ê²ì ì미íëë°, ë¨ì´ 'ì ì 'ì ì´ë° ì¬ì¤ì ëíë ëë¤. ì¤ì²©ë í¨ìë ì¸ë¶ ë²ììì ì ì¸í ë³ììë ì ê·¼í ì ììµëë¤.
ì´ í¹ì ìììì, ë²ìë "í¨ì ë²ì"ë¼ê³ íëë°, ê·¸ ì´ì ë ë³ìì ì ê·¼í ì ìê³ ë³ìê° ì ì¸ë í¨ì 본문 ë´ììë§ ì ê·¼í ì ì기 ë문ì ëë¤.
let
ê³¼ const
를 ì¬ì©í ë²ì ì§ì
(ES6 ì´ì ) ì íµì ì¸ JavaScriptìë í¨ì ì¤ì½íì ì ì ì¤ì½í ë ê°ì§ë§ ì¡´ì¬íìµëë¤. var
ë¡ ì ì¸í ë³ìë í¨ì ë´ë¶ ëë ì¸ë¶ìì ì ì¸ëìëì§ì ë°ë¼ í¨ì ì¤ì½í ëë ì ì ì¤ì½í를 ê°ì§ê² ë©ëë¤. ì´ë, ì¤ê´í¸ë¡ íìë ë¸ë¡ì´ ì¤ì½í를 ìì±íì§ ìëë¤ë ì ìì í¼ëì ì¼ì¼í¬ ì ììµëë¤.
if (Math.random() > 0.5) {
var x = 1;
} else {
var x = 2;
}
console.log(x);
Cë Javaì ê°ì´ ë¸ë¡ì´ ì¤ì½í를 ìì±íë ì¸ì´ì ê²½ì°, ì ì½ëì console.log
ë¼ì¸ìì x
ê° ì´ë¤ ë¸ë¡ ì¤ì½íìë í¬í¨ëì§ ì기 ë문ì ìë¬ê° ë°ìí´ì¼ í ê²ì
ëë¤. ê·¸ë¬ë, ë¸ë¡ì var
ë¡ ì ì¸í ë³ìì ëí´ ì¤ì½í를 ìì±íì§ ì기 ë문ì, ì¬ê¸°ì var
ëª
ë ¹ë¬¸ì ì ì ë³ì를 ìì±í©ëë¤. ì´ê²ì í´ë¡ì ì í¨ê» ì¬ì©íì ë ì´ë¤ ë²ê·¸ê° ë°ìí ì ìëì§ ì¤ì ìì ê° ìë ìê°ëì´ ììµëë¤.
ES6ìì, JavaScriptë ë¸ë¡ ì¤ì½í ë³ì를 ìì±í ì ìëë¡ let
ê³¼ const
ì ì¸ê³¼ í¨ê» ì¼ìì ì¬ê°ì§ë ë±ì ëì
íìµëë¤.
if (Math.random() > 0.5) {
const x = 1;
} else {
const x = 2;
}
console.log(x); // 참조 ìë¬: xê° ì ìëì´ ìì§ ììµëë¤.
ìì½íìë©´, ES6ë¶í° ë¸ë¡ì ì¤ì½íë¡ ì·¨ê¸ë기 ììíì§ë§, ì´ë let
ê³¼ const
ë¡ ë³ì를 ì ì¸íì ëë§ ì í¨í©ëë¤. ëí, ES6ìì 모ëì ëì
íë©´ì ë ë¤ë¥¸ ì¤ì½í를 ì ê³µíê² ëììµëë¤. ì¶í ìê°íê² ì§ë§, í´ë¡ì ë ì´ ëª¨ë ì¤ì½íì ë³ì를 캡ì²í ì ììµëë¤.
ë¤ì ìì 를 ë³´ê² ìµëë¤.
function makeFunc() {
const name = "Mozilla";
function displayName() {
console.log(name);
}
return displayName;
}
const myFunc = makeFunc();
myFunc();
ì´ ì½ëë ì ìì ì init()
í¨ìì ìì í ëì¼í ê²°ê³¼ê° ì¤íë©ëë¤. ë¤ë¥¸ ì (ê·¸ë¦¬ê³ í¥ë¯¸ë¡ì´ ì )ì displayName()
ë´ë¶ í¨ìê° ì¤íë기 ì ì ì¸ë¶ í¨ììì ë°íëë¤ë ì ì
ëë¤.
íëì ë´ìë, ì´ ì½ëê° ì¬ì í ìëíë ê²ì´ ì§ê´ì ì¼ë¡ ë³´ì´ì§ ìì ì ììµëë¤. ëªëª íë¡ê·¸ëë° ì¸ì´ìì, í¨ì ìì ì§ì ë³ìë¤ì ê·¸ í¨ìê° ì²ë¦¬ëë ëììë§ ì¡´ì¬í©ëë¤. makeFunc()
ì¤íì´ ëëë©´, name
ë³ìì ë ì´ì ì ê·¼í ì ìê² ë ê²ì¼ë¡ ììíë ê²ì´ ì¼ë°ì ì´ì§ë§, ì½ëë ì¬ì í ììëë¡ ìëí기 ë문ì JavaScriptììë ë¶ëª
í ë¤ë¦
ëë¤.
ê·¸ ì´ì ë JavaScriptì í¨ìê° í´ë¡ì 를 íì±í기 ë문ì
ëë¤. í´ë¡ì ë í¨ìì í¨ìê° ì ì¸ë ì´íì íê²½ì ì¡°í©ì
ëë¤. ì´ íê²½ì í´ë¡ì ê° ìì±ë ìì ì ì í¨ ë²ì ë´ì ìë 모ë ì§ì ë³ìë¡ êµ¬ì±ë©ëë¤. ììì ê²½ì°, myFunc
ì makeFunc
ì´ ì¤í ë ë ìì±ë displayName
í¨ìì ì¸ì¤í´ì¤ì ëí 참조ì
ëë¤. displayName
ì ì¸ì¤í´ì¤ë ë³ì name
ì´ ìë ì´íì íê²½ì ëí 참조를 ì ì§í©ëë¤. ì´ë° ì´ì ë¡, myFunc
ê° í¸ì¶ë ë ë³ì name
ì ì¬ì©í ì ìë ìíë¡ ë¨ê² ëê³ "Mozilla" ê° console.log
ì ì ë¬ë©ëë¤.
ë¤ìì ì¡°ê¸ ë í¥ë¯¸ë¡ì´ ìì ì¸ makeAdder
í¨ìì
ëë¤.
function makeAdder(x) {
return function (y) {
return x + y;
};
}
const add5 = makeAdder(5);
const add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
ì´ ìì ìì, ë¨ì¼ ì¸ì x
를 ë°ìì ì í¨ì를 ë°ííë í¨ì makeAdder(x)
를 ì ìí©ëë¤. ë°íëë í¨ìë ë¨ì¼ì¸ì y
를 ë°ìì x
ì y
ì í©ì ë°íí©ëë¤.
본ì§ì ì¼ë¡, makeAdder
ë í¨ì를 ë§ë¤ì´ë´ë í©í 리ì
ëë¤. ì´ë makeAdder
í¨ìê° í¹ì í ê°ì ì¸ìë¡ ê°ì§ ì ìë í¨ìë¤ì 리í´íë¤ë ê²ì ì미í©ëë¤. ìì ìì ìì, í¨ì í©í 리ë ì¸ìì 5ì 10ì ëíë ë ê°ì ìë¡ì´ í¨ìë¤ì ë§ë¤ì´ ë
ëë¤.
add5
ì add10
ì ë ë¤ í´ë¡ì ì
ëë¤. ì´ë¤ì ê°ì í¨ì 본문 ì ì를 ê³µì íì§ë§ ìë¡ ë¤ë¥¸ ë§¥ë½(ì´í)ì íê²½ì ì ì¥í©ëë¤. í¨ì ì¤í ì add5
ì ì´íì íê²½ìì, í´ë¡ì ë´ë¶ì xë 5 ì´ì§ë§, add10
ì ë§¥ë½ì íê²½ìì xë 10ì
ëë¤.
í´ë¡ì ë ì´ë¤ ë°ì´í°(ì´íì íê²½)ì ê·¸ ë°ì´í°ë¥¼ ì¡°ìíë í¨ì를 ì°ê´ìì¼ì£¼ê¸° ë문ì ì ì©í©ëë¤. ì´ê²ì ê°ì²´ê° ì´ë¤ ë°ì´í°ì(ê·¸ ê°ì²´ì ìì±) íë í¹ì ê·¸ ì´ìì ë©ìëë¤ì ì°ê´ìí¨ë¤ë ì ìì ê°ì²´ì§í¥ íë¡ê·¸ëë°ê³¼ ë¶ëª í ê°ì ë§¥ë½ì ììµëë¤.
ê²°ë¡ ì ì¼ë¡, ì¤ì§ íëì ë©ìë를 ê°ì§ê³ ìë ê°ì²´ë¥¼ ì¼ë°ì ì¼ë¡ ì¬ì©íë 모ë ê³³ì í´ë¡ì 를 ì¬ì©í ì ììµëë¤.
ì´ë ê² í ì ìë ìí©ì í¹í ì¹ìì ì¼ë°ì ì ëë¤. íë¡ í¸ìë JavaScriptìì ì°ë¦¬ê° ì°ë ë§ì ì½ëê° ì´ë²¤í¸ 기ë°ì ëë¤. ì°ë¦¬ë ëª ê°ì§ ëìì ì ìí ë¤ì ì¬ì©ìì ìí ì´ë²¤í¸(í´ë¦ í¹ì í¤ ë르기 ê°ì)ì ì°ê²°í©ëë¤. ì´ ì½ëë ì¼ë°ì ì¼ë¡ ì½ë°±(ì´ë²¤í¸ì ìëµíì¬ ì¤íëë ë¨ì¼ í¨ì)ì¼ë¡ ì¶ê°ë©ëë¤.
ì를 ë¤ë©´, íì´ì§ì ê¸ì í¬ê¸°ë¥¼ ì¡°ì íë ëª ê°ì ë²í¼ì ì¶ê°íë¤ê³ ê°ì í©ìë¤. ì´ ìì
ì ìííë í ê°ì§ ë°©ë²ì body
ììì font-size를 í½ì
ë¨ìë¡ ì§ì íê³ ìëì ì¸ em
ë¨ì를 ì¬ì©íì¬ íì´ì§ì ë¤ë¥¸ ìì(ì: í¤ë)ì í¬ê¸°ë¥¼ ì¤ì íë ê²ì
ëë¤.
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
}
h1 {
font-size: 1.5em;
}
h2 {
font-size: 1.2em;
}
ì°ë¦¬ì ëíì ê¸ì í¬ê¸° ë²í¼ë¤ì body
ììì font-size
ìì±ì ë³ê²½í ì ìê³ , ì´ë° ì¡°ì ì ìëì ë¨ìë¤ ëë¶ì íì´ì§ì ë¤ë¥¸ ììì ìí´ ì íë©ëë¤.
ì¬ê¸° JavaScript ì½ëê° ììµëë¤.
function makeSizer(size) {
return function () {
document.body.style.fontSize = `${size}px`;
};
}
const size12 = makeSizer(12);
const size14 = makeSizer(14);
const size16 = makeSizer(16);
size12
, size14
, size16
ì body ììì ê¸ì í¬ê¸°ë¥¼ ê°ê° 12, 14, 16 í½ì
ë¡ ë°ê¾¸ë í¨ìì
ëë¤. ì´ í¨ìë¤ì ë¤ìê³¼ ê°ì´ ë²í¼ë¤ì(ì´ ê²½ì°ìë íì´í¼ë§í¬) ì°ê²°í ì ììµëë¤.
document.getElementById("size-12").onclick = size12;
document.getElementById("size-14").onclick = size14;
document.getElementById("size-16").onclick = size16;
<a href="#" id="size-12">12</a>
<a href="#" id="size-14">14</a>
<a href="#" id="size-16">16</a>
JSFiddleì ì¤íí´ë³´ì¸ì.
í´ë¡ì 를 ì´ì©í´ì ë¹ê³µê° ë©ìë (private method) íë´ë´ê¸°ìë°ì ê°ì ëªëª ì¸ì´ë¤ì ë©ìë를 ë¹ê³µê°ë¡ ì ì¸í ì ìë 기ë¥ì ì ê³µí©ëë¤. ì´ë ê°ì í´ëì¤ ë´ë¶ì ë¤ë¥¸ ë©ìëììë§ ê·¸ ë©ìëë¤ì í¸ì¶í ì ìë¤ë ì미ì ëë¤.
classes ì´ì ì JavaScriptìë ë¹ê³µê° ë©ìë를 ì ì¸íë 기본 ë°©ë²ì´ ììì§ë§, í´ë¡ì 를 ì¬ì©íì¬ ë¹ê³µê° ë©ìë를 íë´ë¼ ì ìë¤ë ê²ì´ ê°ë¥íìµëë¤. ë¹ê³µê° ë©ìëë ì½ëì ëí ì ê·¼ì ì ííë ë°ë§ ì ì©í ê²ì´ ìëëë¤. ëí ì ì ì´ë¦ ê³µê°ì ê´ë¦¬íë ê°ë ¥í ë°©ë²ì ì ê³µí©ëë¤.
ìë ì½ëë ë¹ê³µê° í¨ìì ë³ìì ì ê·¼íë í¼ë¸ë¦ í¨ì를 ì ìí기 ìí´ í´ë¡ì 를 ì¬ì©íë ë°©ë²ì ë³´ì¬ì¤ëë¤. ì´ë ê² í´ë¡ì 를 ì¬ì©íë ê²ì 모ë ëìì¸ í¨í´ì ë°ë¥¸ë¤ê³ í©ëë¤.
const counter = (function () {
let privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment() {
changeBy(1);
},
decrement() {
changeBy(-1);
},
value() {
return privateCounter;
},
};
})();
console.log(counter.value()); // 0.
counter.increment();
counter.increment();
console.log(counter.value()); // 2.
counter.decrement();
console.log(counter.value()); // 1.
ì´ì ìì ìì, ê° í´ë¡ì ë¤ì´ ê³ ì í ì´íì íê²½ì ê°ì¡ì§ë§, ì¬ê¸°ì ì°ë¦¬ë counter.increment
, counter.decrement
, counter.value
ì¸ í¨ìì ìí´ ê³µì ëë íëì ì´íì íê²½ì ë§ë¤ì´ ì¤ëë¤.
ê³µì ëë ì´íì íê²½ì ì¤íëë ìµëª
í¨ì ììì ë§ë¤ì´ì§ëë¤. ì´ ìµëª
í¨ìë ì ìëë ì¦ì ì¤íë©ëë¤(IIFEë¡ ìë ¤ì ¸ ììµëë¤). ì´ ì´íì íê²½ì ë ê°ì ë¹ê³µê° í목ì í¬í¨í©ëë¤. íëë privateCounter
ë¼ë ë³ìì´ê³ , ëë¨¸ì§ íëë changeBy
ë¼ë í¨ìì
ëë¤. ë ë¤ ìµëª
í¨ì ì¸ë¶ìì ì ê·¼ë ì ìë ë¹ê³µê° í목ì
ëë¤. ëì ì ìµëª
ëí¼ìì ë°íë ì¸ ê°ì ê³µê° í¨ì를 íµí´ìë§ ì ê·¼í ì ììµëë¤.
ìì ì¸ ê°ì§ ê³µê° í¨ìë ê°ì íê²½ì ê³µì íë í´ë¡ì ì
ëë¤. JavaScriptì ì´íì ì í¨ ë²ì ëë¶ì, ì¸ í¨ì ê°ê° privateCounter
ë³ìì changeBy
í¨ìì ì ê·¼í ì ììµëë¤.
const makeCounter = function () {
let privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment() {
changeBy(1);
},
decrement() {
changeBy(-1);
},
value() {
return privateCounter;
},
};
};
const counter1 = makeCounter();
const counter2 = makeCounter();
console.log(counter1.value()); // 0.
counter1.increment();
counter1.increment();
console.log(counter1.value()); // 2.
counter1.decrement();
console.log(counter1.value()); // 1.
console.log(counter2.value()); // 0.
ë ì¹´ì´í°ê° ìë¡ ë
립ì±ì ì ì§íë ë°©ë²ì 주목íì¸ì. ê° í´ë¡ì ë ìì²´ í´ë¡ì 를 íµí´ privateCounter
ë³ìì ë¤ë¥¸ ë²ì ì 참조í©ëë¤. ì¹´ì´í° ì¤ íëê° í¸ì¶ë ëë§ë¤, ì´ ë³ìì ê°ì ë³ê²½íì¬ ì´í íê²½ì´ ë³ê²½ë©ëë¤. íëì í´ë¡ì ìì ë³ì ê°ì ë³ê²½í´ë ë¤ë¥¸ í´ë¡ì ì ê°ìë ìí¥ì 미ì¹ì§ ììµëë¤.
ì°¸ê³ : ì´ë° ë°©ìì¼ë¡ í´ë¡ì 를 ì¬ì©íì¬ ê°ì²´ì§í¥ íë¡ê·¸ëë°ì ì ë³´ ìëê³¼ 캡ìí ê°ì ì´ì ë¤ì ì»ì ì ììµëë¤.
í´ë¡ì ì¤ì½í ì²´ì¸ëª¨ë í´ë¡ì ìë ì¸ê°ì§ ì¤ì½í(ë²ì)ê° ììµëë¤:
ì¼ë°ì ì¼ë¡ íë ì¤ìë ì¸ë¶ í¨ì ìì²´ê° ì¤ì²©ë í¨ìì¸ ê²½ì°, ì¸ë¶ í¨ìì ë²ìì ëí ì ê·¼ì ì¸ë¶ í¨ìì ëë¬ì¸ê³ ìë ë²ìê° í¬í¨ëë¤ë ì¬ì¤ì 깨ë«ì§ 못íë ê²ì ëë¤. ì¦, í¨ê³¼ì ì¼ë¡ í¨ì ë²ì ì²´ì¸ì ìì±í©ëë¤. ìë ìì 를 íì¸í´ë³´ì¸ì.
// ì ì ë²ì (global scope)
const e = 10;
function sum(a) {
return function (b) {
return function (c) {
// ì¸ë¶ í¨ì ë²ì (outer functions scope)
return function (d) {
// ì§ì ë²ì (local scope)
return a + b + c + d + e;
};
};
};
}
console.log(sum(1)(2)(3)(4)); // 20
ìµëª í¨ì ìì´ ìì±í ìë ììµëë¤.
// ì ì ë²ì (global scope)
const e = 10;
function sum(a) {
return function sum2(b) {
return function sum3(c) {
// ì¸ë¶ í¨ì ë²ì (outer functions scope)
return function sum4(d) {
// ì§ì ë²ì (local scope)
return a + b + c + d + e;
};
};
};
}
const sum2 = sum(1);
const sum3 = sum2(2);
const sum4 = sum3(3);
const result = sum4(4);
console.log(result); // 20
ìì ìì 를 ë³´ë©´, ì¼ë ¨ì ì¤ì²©ë í¨ìë¤ì íì¸í ì ììµëë¤. ì´ í¨ìë¤ì ì ë¶ ì¸ë¶ í¨ìì ë²ìì ì ê·¼í ì ììµëë¤. ì´ ë¬¸ë§¥ììë í´ë¡ì ê° ì ì¸ë "모ë " ì¸ë¶ í¨ìì ì¤ì½íì ì ê·¼íë¤ê³ ë§í ì ììµëë¤.
í´ë¡ì ë ë¸ë¡ ë²ìì 모ë ë²ìììë ë³ì를 캡ì²í ì ììµëë¤. ì를 ë¤ì´, ë¤ìì ë¸ë¡ ë²ì ë³ì y
ì ëí í´ë¡ì 를 ìì±í©ëë¤.
function outer() {
let getY;
{
const y = 6;
getY = () => y;
}
console.log(typeof y); // undefined
console.log(getY()); // 6
}
outer();
모ëì ëí í´ë¡ì ë ëì± í¥ë¯¸ë¡ìµëë¤.
// myModule.js
let x = 5;
export const getX = () => x;
export const setX = (val) => {
x = val;
};
ì¬ê¸°ìì, 모ëì 모ë ë²ì ë³ì x
를 ë«ë í ìì getter-setter í¨ì를 ë´ë³´ë
ëë¤. x
ë ë¤ë¥¸ 모ëìì ì§ì ì ê·¼í ì ìë ê²½ì°ìë, í¨ì를 ì¬ì©íì¬ ì½ê³ ì¸ ì ììµëë¤.
import { getX, setX } from "./myModule.js";
console.log(getX()); // 5
setX(6);
console.log(getX()); // 6
í´ë¡ì ë ìë ê°ì´ ë³ê²½ëë©´, ê°ì ¸ì¨ ê°ë ê·¸ì ë°ë¼ ë³ê²½ë기 ë문ì "live bindings"ë¡ ê°ì£¼ëë ê°ì ¸ì¨ ê°ì ë«ì ì ììµëë¤.
// myModule.js
export let x = 1;
export const setX = (val) => {
x = val;
};
// closureCreator.js
import { x } from "./myModule.js";
export const getX = () => x;
// ê°ì ¸ì¨ live bindingì ë«ìµëë¤.
import { getX } from "./closureCreator.js";
import { setX } from "./myModule.js";
console.log(getX()); // 1
setX(2);
console.log(getX()); // 2
루íìì í´ë¡ì ìì±í기: ì¼ë°ì ì¸ ì¤ì
let
í¤ìëê° ëì
ë기 ì ìë í´ë¡ì ì ê´ë ¨ë ì¼ë°ì ì¸ ë¬¸ì ë 루í ììì í´ë¡ì ê° ìì±ëìì ë ë°ìíìµëë¤. ë¤ì ìì 를 ë´
ìë¤.
<p id="help">Helpful notes will appear here</p>
<p>E-mail: <input type="text" id="email" name="email" /></p>
<p>Name: <input type="text" id="name" name="name" /></p>
<p>Age: <input type="text" id="age" name="age" /></p>
function showHelp(help) {
document.getElementById("help").textContent = help;
}
function setupHelp() {
var helpText = [
{ id: "email", help: "Your e-mail address" },
{ id: "name", help: "Your full name" },
{ id: "age", help: "Your age (you must be over 16)" },
];
for (var i = 0; i < helpText.length; i++) {
// ë²ì¸ì ì´ ì¤ìì `var`를 ì¬ì©íë ê²ì
ëë¤.
var item = helpText[i];
document.getElementById(item.id).onfocus = function () {
showHelp(item.help);
};
}
}
setupHelp();
JSFiddle ì½ë를 ì¤íí´ë³´ì¸ì.
helpText
ë°°ì´ì ì¸ ê°ì ëìë§ íí¸ë¥¼ ì ìíë©°, ê° ëìë§ì 문ìì ì
ë ¥ íëì IDì ì°ê´ë©ëë¤. ë°ë³µë¬¸ì ëë©´ì ê° ì
ë ¥ íë IDì í´ë¹íë ì리먼í¸ì onfocus
ì´ë²¤í¸ì ê´ë ¨ë ëìë§ì ë³´ì¬ì£¼ë ë©ìëì ì°ê²°í©ëë¤.
ì´ ì½ë를 ì¬ì©íë©´ ì ëë¡ ëìíì§ ìë ê²ì ìê² ë©ëë¤. ì´ë¤ íëì í¬ì»¤ì¤ë¥¼ 주ëë¼ë ëì´ì ê´í ëìë§ì´ íìë©ëë¤.
ê·¸ ì´ì ë onfocus
ì´ë²¤í¸ì ì°ê²°ë í¨ìê° í´ë¡ì ì´ê¸° ë문ì
ëë¤. ì´ í´ë¡ì ë í¨ì ì ìì setupHelp
í¨ì ë²ììì 캡ì²ë íê²½ì¼ë¡ 구ì±ë©ëë¤. ë°ë³µë¬¸ìì ì¸ ê°ì í´ë¡ì ê° ë§ë¤ì´ì¡ì§ë§, ê° í´ë¡ì ë ê°ì´ ë³íë ë³ìê° (item
) ìë ê°ì ë¨ì¼ ì´íì íê²½ì ê³µì í©ëë¤. ì´ë ë³ì item
ì´ var
ë¡ ì ì¸ëì´ í¸ì´ì¤í
(hoisting)ì¼ë¡ ì¸í´ í¨ì ë²ìê° ì기 ë문ì
ëë¤. item.help
ì ê°ì onfocus
ì½ë°±ì´ ì¤íë ë ê²°ì ë©ëë¤. ë°ë³µë¬¸ì ê·¸ ìê°ê¹ì§ ì´ë¯¸ ê·¸ ê³¼ì ì ì¤íí기 ë문ì, item
ë³ì ê°ì²´(ì¸ ê°ì í´ë¡ì 모ëìì ê³µì íë)ë helpText
목ë¡ì ë§ì§ë§ í목ì ê°ë¦¬í¤ê³ ììµëë¤.
ì´ ê²½ì° í ê°ì§ í´ê²°ì± ì ë ë§ì í´ë¡ì 를 ì¬ì©íë ë°©ë²ì ëë¤. í¹í ììì ì¤ëª í í¨ì í©í 리를 ì¬ì©íë ê²ì ëë¤.
function showHelp(help) {
document.getElementById("help").innerHTML = help;
}
function makeHelpCallback(help) {
return function () {
showHelp(help);
};
}
function setupHelp() {
var helpText = [
{ id: "email", help: "Your e-mail address" },
{ id: "name", help: "Your full name" },
{ id: "age", help: "Your age (you must be over 16)" },
];
for (var i = 0; i < helpText.length; i++) {
var item = helpText[i];
document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
}
}
setupHelp();
ì´ JSFiddle ë§í¬ë¥¼ ì¤íí´ë³´ì¸ì.
ì´ê²ì ììëë¡ ëìí©ëë¤. 모ë ë¨ì¼ ì´í íê²½ì ê³µì íë ì½ë°± ëì ì, makeHelpCallback
í¨ìë ê°ê°ì ì½ë°±ì "ìë¡ì´ ì´íì íê²½"ì ìì±í©ëë¤. ì¬ê¸°ì, help
ë helpText
ë°°ì´ì í´ë¹ 문ìì´ì ëíë
ëë¤.
ìµëª í´ë¡ì 를 ì¬ì©íì¬ ì ì½ë를 ìì±íë ë ë¤ë¥¸ ë°©ë²ì ë¤ìê³¼ ê°ìµëë¤.
function showHelp(help) {
document.getElementById("help").innerHTML = help;
}
function setupHelp() {
var helpText = [
{ id: "email", help: "Your e-mail address" },
{ id: "name", help: "Your full name" },
{ id: "age", help: "Your age (you must be over 16)" },
];
for (var i = 0; i < helpText.length; i++) {
(function () {
var item = helpText[i];
document.getElementById(item.id).onfocus = function () {
showHelp(item.help);
};
})(); // í목ì íì¬ ê°ì´ í¬í¨ë ì¦ê°ì ì¸ ì´ë²¤í¸ 리ì¤ë ì¶ê°(ë°ë³µë ëê¹ì§ ë³´ì¡´ë©ëë¤).
}
}
setupHelp();
í´ë¡ì 를 ë ì´ì ì¬ì©íì§ ìì¼ë ¤ë©´, let
ëë const
í¤ìë를 ì¬ì©í ì ììµëë¤.
function showHelp(help) {
document.getElementById("help").textContent = help;
}
function setupHelp() {
const helpText = [
{ id: "email", help: "Your email address" },
{ id: "name", help: "Your full name" },
{ id: "age", help: "Your age (you must be over 16)" },
];
for (let i = 0; i < helpText.length; i++) {
const item = helpText[i];
document.getElementById(item.id).onfocus = () => {
showHelp(item.help);
};
}
}
setupHelp();
ìì ê²½ì° var
ëì const
ì ì¬ì©íì¬ ëª¨ë í´ë¡ì ê° ë¸ë¡ ë²ì ë³ì를 ë°ì¸ë©í ê²ì´ë¯ë¡ ì¶ê°ì ì¸ í´ë¡ì ê° íìíì§ ììµëë¤.
ë ë¤ë¥¸ ëìì ë¤ìê³¼ ê°ì´ forEach()
를 ì¬ì©íì¬ helpText
ë°°ì´ì ë°ë³µíê³ ê° <input>
ì 리ì¤ë를 ì¶ê°íë ê²ì
ëë¤.
function showHelp(help) {
document.getElementById("help").textContent = help;
}
function setupHelp() {
var helpText = [
{ id: "email", help: "Your e-mail address" },
{ id: "name", help: "Your full name" },
{ id: "age", help: "Your age (you must be over 16)" },
];
helpText.forEach(function (text) {
document.getElementById(text.id).onfocus = function () {
showHelp(text.help);
};
});
}
setupHelp();
ì±ë¥ ê´ë ¨ ê³ ë ¤ ì¬í
ììì ì¸ê¸íë¯ì´, ê° í¨ì ì¸ì¤í´ì¤ë ìì²´ ë²ìì í´ë¡ì 를 ê´ë¦¬í©ëë¤. í¹ì ìì ì í´ë¡ì ê° íìíì§ ìëë° ë¤ë¥¸ í¨ì ë´ìì í¨ì를 ë¶íìíê² ìì±íë ê²ì ì²ë¦¬ ìëì ë©ëª¨ë¦¬ ìë¹ ì¸¡ë©´ìì ì¤í¬ë¦½í¸ ì±ë¥ì ë¶ì ì ì¸ ìí¥ì 미ì¹ê¸° ë문ì, íëª íì§ ììµëë¤.
ì를 ë¤ì´, ìë¡ì´ ê°ì²´/í´ëì¤ë¥¼ ìì±í ë, ë©ìëë ì¼ë°ì ì¼ë¡ ê°ì²´ ìì±ìì ì ìë기보ë¤ë ê°ì²´ì íë¡í íì ì ì°ê²°ëì´ì¼ í©ëë¤. ê·¸ ì´ì ë ìì±ìê° í¸ì¶ë ëë§ë¤ ë©ìëê° ë¤ì í ë¹ë기 ë문ì ëë¤(ì¦, 모ë ê°ì²´ê° ìì±ë ëë§ë¤).
ë¤ì ì를 ìê°í´ë³´ì¸ì.
function MyObject(name, message) {
this.name = name.toString();
this.message = message.toString();
this.getName = function () {
return this.name;
};
this.getMessage = function () {
return this.message;
};
}
ìì ì½ëë í¹ì ì¸ì¤í´ì¤ìì í´ë¡ì ì ì´ì ì íì©íì§ ììì¼ë¡ ë¤ìê³¼ ê°ì´ í´ë¡ì 를 ì¬ì©íì§ ìëë¡ ë¤ì ì¸ ì ììµëë¤.
function MyObject(name, message) {
this.name = name.toString();
this.message = message.toString();
}
MyObject.prototype = {
getName() {
return this.name;
},
getMessage() {
return this.message;
},
};
ê·¸ë¬ë, íë¡í íì ì ë¤ì ì ìíë ê²ì ê¶ì¥ëì§ ìì¼ë¯ë¡, 기존 íë¡í íì ì ì¶ê°íë ë¤ì ìì ê° ë ì¢ìµëë¤.
function MyObject(name, message) {
this.name = name.toString();
this.message = message.toString();
}
MyObject.prototype.getName = function () {
return this.name;
};
MyObject.prototype.getMessage = function () {
return this.message;
};
ìì ë ê°ì§ ìì ìì, ììë íë¡í íì ì 모ë ê°ì²´ìì ê³µì ë ì ìì¼ë©° ë©ìë ì ìë ê°ì²´ ìì±ìë§ë¤ ë°ìí íìê° ììµëë¤. ìì¸í ë´ì©ì ìì ë° íë¡í íì ì²´ì¸ì ì°¸ê³ íì¸ì.
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