ì´ë² 주ì ìì ìì±ë ì§ ì¤ëë ì¤í¬ë¦½í¸ë¥¼ ì½ë ë° ëìì ì¤ ë§í ë´ì©ì ë¤ë£¹ëë¤.
ìë¡ì´ ì½ë를 ìì±í ëë ì´ ë°©ë²ì ì°ìë©´ ì ë©ëë¤.
ë³ì를 ë¤ë£¬ 첫 ë²ì§¸ ì¥ìì ë³ì ì ì¸ ë°©ë² ì¸ ê°ì§ë¥¼ ë°°ì´ ë° ììµëë¤.
letconstvar
varë¡ ì ì¸í ë³ìë letì¼ë¡ ì ì¸í ë³ìì ì ì¬í©ëë¤. ëë¶ë¶ì ê²½ì°ì letì varë¡, var를 letì¼ë¡ ë°ê¿ë í° ë¬¸ì ìì´ ëìí©ëë¤.
var message = "ìë
íì¸ì.";
alert(message); // ìë
íì¸ì.
íì§ë§ varë ì´ê¸° ìë°ì¤í¬ë¦½í¸ 구í ë°©ì ë문ì letê³¼ constë¡ ì ì¸í ë³ììë ë¤ë¥¸ ë°©ìì¼ë¡ ëìí©ëë¤. ê·¼ëì var를 ì°ì§ ììì ì´ë¥¼ ë§ëë ê±´ íì¹ ìì ì¼ì´ì§ë§, varë ì¤ëë ì¤í¬ë¦½í¸ìì ë¹ì ì 기ë¤ë¦¬ê³ ìë 괴물 ê°ì ì¡´ì¬ì
ëë¤.
구ì ì¤í¬ë¦½í¸ë¥¼ ë¤ë£° ê³íì´ ìë ê°ë°ìë¼ë©´ ì´ ì±í°ë¥¼ ê±´ëë°ê±°ë íìµì ë¯¸ë£¨ë ¤ê³ í ê²ëë¤.
íì§ë§ ê·¸ë¬ë¤ê° ì´ ê´´ë¬¼ìê² ë¬¼ë¦´ ì ììµëë¤. í¹í var를 ì¬ì©íë ì¤ëë ì¤í¬ë¦½í¸ë¥¼ letë¡ ë°ê¿ ë varì ëí´ ì ëë¡ ììëì´ì¼ í©ëë¤. ê·¸ë ì§ ìì¼ë©´ ììì¹ ëª»í ìë¬ë¥¼ ë§ë ì ììµëë¤.
varë ë¸ë¡ ì¤ì½íê° ììµëë¤.
varë¡ ì ì¸í ë³ìì ì¤ì½íë í¨ì ì¤ì½íì´ê±°ë ì ì ì¤ì½íì
ëë¤. ë¸ë¡ 기ì¤ì¼ë¡ ì¤ì½íê° ìê¸°ì§ ì기 ë문ì ë¸ë¡ ë°ìì ì ê·¼ ê°ë¥í©ëë¤.
ìì:
if (true) {
var test = true; // 'let' ëì 'var'를 ì¬ì©íìµëë¤.
}
alert(test); // true(if ë¬¸ì´ ëë¬ì´ë ë³ìì ì¬ì í ì ê·¼í ì ìì)
varë ì½ë ë¸ë¡ì 무ìí기 ë문ì testë ì ì ë³ìê° ë©ëë¤. ì ì ì¤ì½íìì ì´ ë³ìì ì ê·¼í ì ìì£ .
ë ë²ì§¸ íìì var testê° ìë let test를 ì¬ì©íë¤ë©´, ë³ì testë if문 ìììë§ ì ê·¼í ì ììµëë¤.
if (true) {
let test = true; // 'let'ì¼ë¡ ë³ì를 ì ì¸í¨
}
alert(test); // Error: test is not defined
ë°ë³µë¬¸ììë ì ì¬í ì¼ì´ ì¼ì´ë©ëë¤. varë ë¸ë¡ì´ë 루í ìì¤ì ì¤ì½í를 íì±íì§ ì기 ë문ì´ì£ .
for (var i = 0; i < 10; i++) {
// ...
}
alert(i); // 10, ë°ë³µë¬¸ì´ ì¢
ë£ëìì§ë§ 'i'ë ì ì ë³ìì´ë¯ë¡ ì¬ì í ì ê·¼ ê°ë¥í©ëë¤.
ì½ë ë¸ë¡ì´ í¨ì ìì ìë¤ë©´, varë í¨ì ë 벨 ë³ìê° ë©ëë¤.
function sayHi() {
if (true) {
var phrase = "Hello";
}
alert(phrase); // ì ëë¡ ì¶ë ¥ë©ëë¤.
}
sayHi();
alert(phrase); // Error: phrase is not defined
ììì ì´í´ë³¸ ë°ì ê°ì´, varë if, for ë±ì ì½ë ë¸ë¡ì ê´íµí©ëë¤. ì주 ì¤ëì ì ìë°ì¤í¬ë¦½í¸ìì ë¸ë¡ ìì¤ ë ì컬 íê²½ì´ ë§ë¤ì´ ì§ì§ ìì기 ë문ì
ëë¤. varë 구ì ìë°ì¤í¬ë¦½í¸ì ìì¬ì´ì£ .
varë ë³ìì ì¤ë³µ ì ì¸ì íì©í©ëë¤
í ì¤ì½íìì ê°ì ë³ì를 letì¼ë¡ ë ë² ì ì¸íë©´ ìë¬ê° ë°ìí©ëë¤.
let user;
let user; // SyntaxError: 'user' has already been declared
varë¡ ê°ì ë³ì를 ì¬ë¬ ë² ì¤ë³µì¼ë¡ ì ì¸í ì ììµëë¤. íì§ë§ ì´ë¯¸ ì ì¸ë ë³ìì var를 ì¬ì©íë©´ ë ë²ì§¸ ì ì¸ë¬¸ì 무ìë©ëë¤.
var user = "Pete";
var user = "John"; // ì´ "var"ë ì무ê²ë íì§ ììµëë¤(ì´ì ì ì´ë¯¸ ì ì¸ë¨).
// ...ìë¬ ëí ë°ìíì§ ììµëë¤.
alert(user); // John
ì ì¸í기 ì ì¬ì©í ì ìë var
var ì ì¸ì í¨ìê° ììë ë ì²ë¦¬ë©ëë¤. ì ììì ì ì¸í ë³ìë¼ë©´ ì¤í¬ë¦½í¸ê° ììë ë ì²ë¦¬ëì£ .
í¨ì 본문 ë´ìì varë¡ ì ì¸í ë³ìë ì ì¸ ìì¹ì ìê´ìì´ í¨ì ë³¸ë¬¸ì´ ììëë ì§ì ìì ì ìë©ëë¤(ë¨, ë³ìê° ì¤ì²© í¨ì ë´ìì ì ìëì§ ììì¼ ì´ ê·ì¹ì´ ì ì©ë©ëë¤).
ë°ë¼ì ìë ë ìì ë ëì¼íê² ëìí©ëë¤.
function sayHi() {
phrase = "Hello";
alert(phrase);
var phrase;
}
sayHi();
var phraseê° ìë¡ ì´ëí ê²ì²ë¼ ë§ì´ì£ .
function sayHi() {
var phrase;
phrase = "Hello";
alert(phrase);
}
sayHi();
ì½ë ë¸ë¡ì 무ìë기 ë문ì, ìë ì½ë ìì ëì¼íê² ëìí©ëë¤.
function sayHi() {
phrase = "Hello"; // (*)
if (false) {
var phrase;
}
alert(phrase);
}
sayHi();
ì´ë ê² ë³ìê° ëì´ì¬ë ¤ ì§ë íìì 'í¸ì´ì¤í
(hoisting)'ì´ë¼ê³ ë¶ë¦
ëë¤. varë¡ ì ì¸í 모ë ë³ìë í¨ìì ìµììë¡ âëì´ ì¬ë ¤ì§ê¸°(hoisted)â ë문ì
ëë¤(hoistë ëì´ì¬ë¦¬ë¤ ë¼ë ë»ì´ ììµëë¤. â ì®ê¸´ì´).
ë°ë¡ ì ìì ìì if (false) ë¸ë¡ ì ì½ëë ì ë ì¤íëì§ ìì§ë§, ì´ë í¸ì´ì¤í
ì ì í ìí¥ì ì£¼ì§ ììµëë¤. if ë´ë¶ì var ë í¨ì sayHiì ìì ë¶ë¶ìì ì²ë¦¬ëë¯ë¡ (*)ë¡ íìí ì¤ìì phraseë ì´ë¯¸ ì ìê° ë ìíì¸ ê²ì´ì£ .
ì ì¸ì í¸ì´ì¤í ëì§ë§ í ë¹ì í¸ì´ì¤í ëì§ ììµëë¤.
ìì를 íµí´ ì´í´ë´ ìë¤.
function sayHi() {
alert(phrase);
var phrase = "Hello";
}
sayHi();
var phrase = "Hello"íìì ë ê°ì§ ì¼ì´ ì¼ì´ë©ëë¤.
- ë³ì ì ì¸(
var) - ë³ìì ê°ì í ë¹(
=)
ë³ì ì ì¸ì í¨ì ì¤íì´ ììë ë ì²ë¦¬ëì§ë§(í¸ì´ì¤í ) í ë¹ì í¸ì´ì¤í ëì§ ì기 ë문ì í ë¹ ê´ë ¨ ì½ëìì ì²ë¦¬ë©ëë¤. ë°ë¼ì ì ìì ë ìë ì½ëì²ë¼ ëìíê² ë©ëë¤.
function sayHi() {
var phrase; // ì ì¸ì í¨ì ìì ì ì²ë¦¬ë©ëë¤.
alert(phrase); // undefined
phrase = "Hello"; // í ë¹ì ì¤í íë¦ì´ í´ë¹ ì½ëì ëë¬íì ë ì²ë¦¬ë©ëë¤.
}
sayHi();
ì´ì²ë¼ 모ë var ì ì¸ì í¨ì ìì ì ì²ë¦¬ë기 ë문ì, varë¡ ì ì¸í ë³ìë ì´ëìë 참조í ì ììµëë¤. íì§ë§ ë³ìì 무ì¸ê°ë¥¼ í ë¹í기 ì ê¹ì§ ê°ì´ undefinedì´ì£ .
ë°ë¡ ìì ë ìììì alert를 í¸ì¶í기 ì ì ë³ì phraseë ì ì¸ì´ ëë ìíì´ê¸° ë문ì ìë¬ ìì´ ì¼ë¿ ì°½ì´ ë¹ëë¤. ê·¸ë¬ë ê°ì´ í ë¹ë기 ì ì´ê¸° ë문ì ì¼ë¿ ì°½ì undefinedê° ì¶ë ¥ëì£ .
ì¦ì ì¤í í¨ì ííì
과거ì varë§ ì¬ì©í ì ìììµëë¤. ê·¸ë°ë° varì ì¤ì½íë ë¸ë¡ ë 벨 ìì¤ì´ ìëì£ . ê°ë°ìë¤ì varë ë¸ë¡ ë 벨 ì¤ì½í를 ê°ì§ ì ìê² ì¬ë¬ê°ì§ ë°©ìì ê³ ë ¤íê² ë©ëë¤. ì´ë ë§ë¤ì´ì§ ê²ì´ 'ì¦ì ì¤í í¨ì ííì(immediately-invoked function expressions)'ì
ëë¤. ì¦ì ì¤í í¨ì ííìì IIFEë¼ê³ ë¶ë¥´ê¸°ë í©ëë¤.
ì¦ì ì¤í í¨ì ííìì ìì¦ìë ì주 ì°ì§ ììµëë¤. íì§ë§ ì¤ëë ì¤í¬ë¦½í¸ìì ë§ë ì ì기 ë문ì ì¦ì ì¤í í¨ì ííìì´ ë¬´ìì¸ì§ ìì ë íìê° ììµëë¤.
IIFEë ë¤ìê³¼ ê°ì´ ìê²¼ìµëë¤.
(function() {
let message = "Hello";
alert(message); // Hello
})();
í¨ì ííìì´ ë§ë¤ì´ì§ê³ ë°ë¡ í¸ì¶ëë©´ì, í´ë¹ í¨ìê° ë°ë¡ ì¤íëììµëë¤. ì´ í¨ìë ìì ë§ì ë³ì를 ê°ê³ ìë¤ì.
ì¦ì ì¤í í¨ì를 ë§ë¤ ë, í¨ì ííìì ê´í¸ë¡ ëë¬ìì (function {â¦})ì ê°ì ííë¡ ë§ëëë¤. ì´ë ê² ê´í¸ë¡ ëë¬ì¸ì§ ìì¼ë©´ ìë¬ê° ë°ìí©ëë¤. ìë°ì¤í¬ë¦½í¸ë 'functionâì´ë¼ë í¤ìë를 ë§ëë©´ í¨ì ì ì¸ë¬¸ì´ ììë ê²ì´ë¼ ììí©ëë¤. ê·¸ë°ë° í¨ì ì ì¸ë¬¸ì¼ë¡ í¨ì를 ë§ë¤ ë ë°ëì í¨ìì ì´ë¦ì´ ìì´ì¼ í©ëë¤. ë°ë¼ì ìëì ìì를 ì¤ííë©´ ìë¬ê° ë°ìí©ëë¤.
// í¨ì를 ì ì¸ê³¼ ëìì ì¤ííë ¤ê³ í¨
function() { // <-- Error: Function statements require a function name
let message = "Hello";
alert(message); // Hello
}();
"ê·¸ë¼ ì´ë¦ì ë£ì¼ë©´ ëë ê±° ìëê°?"ë¼ê³ ìê°í´ ì´ë¦ì ë£ì´ë ìë¬ê° ë°ìí©ëë¤. ìë°ì¤í¬ë¦½í¸ë í¨ì ì ì¸ë¬¸ì¼ë¡ ì ìí í¨ì를 ì ìì ëìì ë°ë¡ í¸ì¶íë ê²ì íì©íì§ ì기 ë문ì ëë¤.
// 맨 ìëì ê´í¸ ë문ì ë¬¸ë² ìë¬ê° ë°ìí©ëë¤.
function go() {
}(); // <-- í¨ì ì ì¸ë¬¸ì ì ì¸ ì¦ì í¸ì¶í ì ììµëë¤.
í¨ì를 ê´í¸ë¡ ê°ì¸ë©´ ìë°ì¤í¬ë¦½í¸ê° í¨ì를 í¨ì ì ì¸ë¬¸ì´ ìë ííìì¼ë¡ ì¸ìíëë¡ ìì¼ ì ììµëë¤. í¨ì ííìì ì´ë¦ì´ ìì´ë ê´ì°®ê³ , ì¦ì í¸ì¶ë ê°ë¥í©ëë¤.
ê´í¸ë¥¼ ì¬ì©íë ë°©ë² ë§ê³ ë, ìë°ì¤í¬ë¦½í¸ê° í¨ì ííìì´ë¼ê³ ì¸ìíê² í´ì£¼ë ë¤ë¥¸ ë°©ë²ë¤ì´ ììµëë¤.
// IIFE를 ë§ëë ë°©ë²
(function() {
alert("í¨ì를 ê´í¸ë¡ ëë¬ì¸ê¸°");
})();
(function() {
alert("ì 체를 ê´í¸ë¡ ëë¬ì¸ê¸°");
}());
!function() {
alert("ííì ìì ë¹í¸ NOT ì°ì°ì ë¶ì´ê¸°");
}();
+function() {
alert("ííì ìì ë¨í ë§ì
ì°ì°ì ë¶ì´ê¸°");
}();
ìì ê°ì ë°©ë²ì ì¬ì©íë©´ í¨ì ííìì²ë¼ ì¸ìëì´ ë°ë¡ ì¤íì´ ê°ë¥í©ëë¤. ê·¸ë°ë° 모ë ìë°ì¤í¬ë¦½í¸ìì ì´ë ê² ì½ë를 ìì±í íìê° ììµëë¤.
ìì½
varë¡ ì ì¸í ë³ìë letì´ë constë¡ ì ì¸í ë³ìì ë¤ë¥¸ ë ê°ì§ 주ìí í¹ì±ì ë³´ì
ëë¤.
varë¡ ì ì¸í ë³ìë ë¸ë¡ ì¤ì½íê° ìë í¨ì ìì¤ ì¤ì½í를 ê°ìµëë¤.varì ì¸ì í¨ìê° ììëë ìì (ì ì ê³µê°ìì ì¤í¬ë¦½í¸ê° ììëë ìì )ìì ì²ë¦¬ë©ëë¤.
ì´ ì¸ìë ì ì ê°ì²´ì ê´ë ¨ë í¹ì± íëê° ë ìëë°, ì´ì ëí´ì ë¤ì ì±í°ìì ë¤ë£¨ëë¡ íê² ìµëë¤.
varë§ì í¹ì±ì ëë¶ë¶ì ìí©ìì ì¢ì§ ìì ë¶ìì©ì ë§ë¤ì´ë
ëë¤. letì´ íì¤ì ëì
ë ì´ì ê° ë°ë¡ ì´ë° ë¶ìì©ì ìì 기 ìí´ìì
ëë¤. ë³ìë ë¸ë¡ ë 벨 ì¤ì½í를 ê°ë ê² ì¢ì¼ë¯ë¡ ì´ì ë letê³¼ const를 ì´ì©í´ ë³ì를 ì ì¸íë ê² ëì¸ê° ëììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.