Baseline Widely available
let
ëª
ë ¹ë¬¸ì ë¸ë¡ ì¤ì½íì ë²ì를 ê°ì§ë ì§ì ë³ì를 ì ì¸íë©°, ì ì¸ê³¼ ëìì ììì ê°ì¼ë¡ ì´ê¸°íí ìë ììµëë¤.
let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// Expected output: 2
}
console.log(x);
// Expected output: 1
구문
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
매ê°ë³ì
nameN
ë³ì ì´ë¦. 모ë ì í¨í JavaScript ìë³ìì¬ì¼ í©ëë¤.
valueN
Optional
ê°ê°ì ë³ì ì ì¸ì ëí´, ì í¨í JavaScript ííìì ì§ì í´ ë³ìì ì´ê¸° ê°ì ì§ì í ì ììµëë¤.
ì´ êµ¬ë¬¸ ëì 구조 ë¶í´ í ë¹ì ì¬ì©í´ì ë³ì를 ì ì¸í ìë ììµëë¤.
let { bar } = foo; // foo = { bar: 10, baz: 12 };
/* 10ì ê°ì ê°ì§ 'bar' ë³ì를 ìì± */
ì¤ëª
let
ì ì¬ì©íë©´ ë¸ë¡ ëª
ë ¹ë¬¸ì´ë let
ì ì¬ì©í ííì ë´ë¡ ë²ìê° ì íëë ë³ì를 ì ì¸í ì ììµëë¤. ì´ë let
ì´ var
í¤ìëì ë¤ë¥¸ ì ì¼ë¡, var
ë ë³ì를 ë¸ë¡ì ê³ ë ¤íì§ ìê³ íì¬ í¨ì (ëë ì ì ì¤ì½í) ì´ëììë ì ê·¼í ì ìë ë³ì를 ì ì¸í©ëë¤. ëí let
ì íìê° êµ¬ë¬¸ì íê°í´ì¼ë§ ë³ì를 ê°ì¼ë¡ ì´ê¸°í(ìë ì°¸ê³ )íë¤ë ì ë var
ì ë¤ë¦
ëë¤.
const
ì ë§ì°¬ê°ì§ë¡ let
ìì ì ì ë²ì ì ì¸ì ì¬ì©(ìµìì ì¤ì½í ì ì¸)í´ë window
ê°ì²´ì ìë¡ì´ ìì±ì ì¶ê°íì§ ììµëë¤.
ì í¤ìëì ì´ë¦ì´ "let"ì´ ëëì§ì ëí ì¤ëª ì ì¬ê¸°ì ì½ì ì ììµëë¤.
ìì ì¤ì½í ê·ì¹ì°¸ê³ :
let
ë³ìê° ê°ì§ ë¤ìí 문ì ë,let
ë³ì ì ì¸ì íì¬ ì¤ì½íì 맨 ììì ìíí´ì í¼í ì ììµëë¤. (ê°ë ì±ì ìí¥ì ì¤ ì ììµëë¤)
let
ì¼ë¡ ì ì¸í ë³ìë ìì ì ì ì¸í ë¸ë¡ê³¼ 모ë íì ë¸ë¡ì ì¤ì¤ë¡ì ì¤ì½íë¡ ê°ì§ëë¤. ì´ë° ì ììë let
ì´ var
ì ì ì¬í©ëë¤. ê·¸ë¬ë ëì ì¤ìí ì°¨ì´ë, var
ì ê²½ì° ì¤ì½íê° 'ìì ì ì ì¸í ë¸ë¡'ì´ ìëë¼, ìì ì ì ì¸ì í¬í¨íë í¨ìë¼ë ì ì
ëë¤.
function varTest() {
var x = 1;
if (true) {
var x = 2; // ê°ì ë³ì!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // ë¤ë¥¸ ë³ì
console.log(x); // 2
}
console.log(x); // 1
}
íë¡ê·¸ë¨ ìµìììì ì¬ì©í ê²½ì° var
ë ì ì ê°ì²´ì ìì±ì ì¶ê°íì§ë§ let
ì ì¶ê°íì§ ììµëë¤.
var x = "global";
let y = "global";
console.log(this.x); // "global"
console.log(this.y); // undefined
ë¹ê³µê° ë©¤ë² ëª¨ì¬
ìì±ìì let
ì í¨ê» ì¬ì©íë©´ í´ë¡ì 를 ì¬ì©íì§ ììë ë¹ê³µê° 멤ë²ë¥¼ ëíë¼ ì ììµëë¤.
var Thing;
{
let privateScope = new WeakMap();
let counter = 0;
Thing = function () {
this.someProperty = "foo";
privateScope.set(this, {
hidden: ++counter,
});
};
Thing.prototype.showPublic = function () {
return this.someProperty;
};
Thing.prototype.showPrivate = function () {
return privateScope.get(this).hidden;
};
}
console.log(typeof privateScope);
// "undefined"
var thing = new Thing();
console.log(thing);
// Thing {someProperty: "foo"}
thing.showPublic();
// "foo"
thing.showPrivate();
// 1
í´ë¡ì 를 ì¬ì©íë©´ var
를 ì¨ë ìì ëì¼í ìë í¨í´ì 구íí ì ììµëë¤. ê·¸ë¬ë ì´ ê²½ì°, ì ì½ëì ê°ì ë¨ì ë¸ë¡ ì¤ì½í를 ì¬ì©í ì ìì¼ë©° í¨ì ì¤ì½í(ë³´íµ ëª¨ë í¨í´ì IIFE)ê° íìí©ëë¤.
ê°ì ë³ì를 ê°ì í¨ìë ë¸ë¡ ì¤ì½í ììì ë¤ì ì ì¸íë ¤ê³ ìëíë©´ SyntaxError
ê° ë°ìí©ëë¤.
if (x) {
let foo;
let foo; // SyntaxError
}
switch
ëª
ë ¹ë¬¸ìë ë¸ë¡ì´ íëë°ì ìì¼ë¯ë¡ ì´ ì¤ë¥ë¥¼ ì주 ë§ì£¼ì¹ ì ììµëë¤.
let x = 1;
switch (x) {
case 0:
let foo;
break;
case 1:
let foo; // ì¬ì ì¸ì¼ë¡ ì¸í SyntaxError
break;
}
ê·¸ë¬ë ë¶ê¸°ì ë¸ë¡ì ë°°ì¹íë©´ ë¸ë¡ ì¤ì½íë ìì±íë¯ë¡ ì¬ì ì¸ì¼ë¡ ì¸í ì¤ë¥ê° ë°ìíì§ ììµëë¤.
let x = 1;
switch (x) {
case 0: {
let foo;
break;
}
case 1: {
let foo;
break;
}
}
ì¼ìì ì¬ê°ì§ë
let
ë³ìë ì´ê¸°íí기 ì ìë ì½ê±°ë ì¸ ì ììµëë¤(ì ì¸ êµ¬ë¬¸ì ì´ê¸° ê°ì ì§ì íì§ ìì ê²½ì° undefined
ë¡ ì´ê¸°íí¨). ì´ê¸°í ì ì ì ê·¼ì ìëíë©´ ReferenceError
ê° ë°ìí©ëë¤.
ì°¸ê³ :
var
ë³ìì ë¤ë¥¸ ì ì¼ë¡,var
ì ê²½ì° ì ì¸ ì ì ì ê·¼í ìundefined
ì ëë¤.
ë³ì ì¤ì½íì 맨 ììì ë³ìì ì´ê¸°í ìë£ ìì ê¹ì§ì ë³ìë "ì¼ìì ì¬ê°ì§ë"(Temporal Dead Zone, TDZ)ì ë¤ì´ê° ë³ìë¼ê³ ííí©ëë¤.
function do_something() {
console.log(bar); // undefined
console.log(foo); // ReferenceError
var bar = 1;
let foo = 2;
}
"ì¼ìì " ì¬ê°ì§ëì¸ ì´ì ë, ì¬ê°ì§ëê° ì½ëì ìì± ìì(ìì¹)ê° ìëë¼ ì½ëì ì¤í ìì(ìê°)ì ìí´ íì±ë기 ë문ì
ëë¤. ì컨ë ìë ì½ëì ê²½ì° let
ë³ì ì ì¸ ì½ëê° ê·¸ ë³ìì ì ê·¼íë í¨ìë³´ë¤ ìëì ìì¹íì§ë§, í¨ìì í¸ì¶ ìì ì´ ì¬ê°ì§ë ë°ì´ë¯ë¡ ì ì ëìí©ëë¤.
{
// TDZê° ì¤ì½í 맨 ìììë¶í° ìì
const func = () => console.log(letVar); // OK
// TDZ ììì letVarì ì ê·¼íë©´ ReferenceError
let letVar = 3; // letVarì TDZ ì¢
ë£
func(); // TDZ ë°ìì í¸ì¶í¨
}
TDZì typeof
typeof
ì°ì°ì를 TDZ ë´ì let
ë³ìì ì¬ì©í´ë ReferenceError
ê° ë°ìí©ëë¤.
console.log(typeof i); // ReferenceError
let i = 10;
ì ì¸ì¡°ì°¨ íì§ ìì ë³ì, ëë undefined
를 ê°ì¼ë¡ ê°ì§ ë³ìì ë¤ë¥¸ ì ì
ëë¤.
console.log(typeof undeclaredVariable); // undefined ì¶ë ¥
ì´íì ì¤ì½íì ê²°í©í TDZ
ìë ì½ëë 주ìì¼ë¡ í기í ì§ì ìì ReferenceError
ê° ë°ìí©ëë¤.
function test() {
var foo = 33;
if (foo) {
let foo = foo + 55; // ReferenceError
}
}
test();
ë°ê¹¥ ì¤ì½íì var foo
ê° ê°ì ê°ì§ë¯ë¡ if
ë¸ë¡ ëí íê°ë©ëë¤. ê·¸ë¬ë ì´íì ì¤ì½íë¡ ì¸í´, var foo
ì ê°ì ë¸ë¡ ë´ìì ì¬ì©í ì ììµëë¤. ì´ê³³ì foo
ìë³ìë let foo
를 ê°ë¦¬í¤ê¸° ë문ì
ëë¤. ë°ë¼ì (foo + 55)
ííìì let foo
ì ì´ê¸°íê° ëëì§ ìì, ì¦ TDZì ë´ë¶ì´ë©° ReferenceError
ê° ë°ìíê² ëë ê²ì
ëë¤.
ìëì ê°ì ì½ëììë ì´ íìì¼ë¡ ì¸í´ ìë¹í í¼ëì 겪ì ì ììµëë¤. ë°ë³µë¬¸ì let n of n.a
ë for
ë¸ë¡ì ì¤ì½íì ìíë¯ë¡, ìë³ì n.a
ë ë°ë³µë¬¸ ì¤ì¤ë¡ê° ì ì¸(let n
)íë n
ê°ì²´ì a
ìì±ì ê°ë¦¬íµëë¤. ê·¸ë¦¬ê³ n
ì ì ì¸ í ì´ê¸°íê° ìì§ ëëì§ ììì¼ë¯ë¡ n.a
ë let n
ì TDZì ìí©ëë¤.
function go(n) {
// ì´ nì 매ê°ë³ì n
console.log(n); // Object {a: [1,2,3]}
for (let n of n.a) {
// ReferenceError
console.log(n);
}
}
go({ a: [1, 2, 3] });
기í ìì
ë¸ë¡ ë´ìì ì¬ì©í ê²½ì° let
ì ë³ìì ì¤ì½í를 í´ë¹ ë¸ë¡ì¼ë¡ ì íí©ëë¤. var
ë ì¤ì½í를 í¨ìë¡ ì ííë¤ë ì°¨ì´ì 주ìíì¸ì.
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // ì ì ë³ì
let b = 22; // if ë¸ë¡ ë³ì
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
ê·¸ë¬ë var
ì let
ì ìëì ê°ì´ ì¬ì©íë©´ SyntaxError
ì
ëë¤. í¸ì´ì¤í
ì¼ë¡ ì¸í´ var
ê° ë¸ë¡ ìµìë¨ì¼ë¡ ëì´ì¬ë ¤ì ¸, ë³ì ì¬ì ì¸ì íë ê²ê³¼ ê°ìì§ê¸° ë문ì
ëë¤.
let x = 1;
{
var x = 2; // ì¬ì ì¸ì¼ë¡ ì¸í SyntaxError
}
ëª
ì¸ ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
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