Skip to content

Latest commit

Β 

History

History
134 lines (119 loc) Β· 4.67 KB

ch15-ν•΄μ„€.md

File metadata and controls

134 lines (119 loc) Β· 4.67 KB

Chapter15 let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„

πŸ“Œλ¬Έμ œ1

1) λ‹€μŒ μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Ό (1), (3), (5)λ₯Ό μ˜ˆμΈ‘ν•˜μ„Έμš”.

2) μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(TDZ)λž€ 무엇인지 μ„œμˆ ν•˜κ³ , μ½”λ“œμ—μ„œ κ·Έ ꡬ간을 κ³ λ₯΄μ„Έμš”.

console.log(foo); // (1)

lef foo; // (2)
console.log(foo); // (3)

foo = 1; // (4)
console.log(foo); // (5)

1) μ •λ‹΅ 및 ν•΄μ„€

(1) ReferenceError: foo is not defined
(3) undefined
(5) 1
(1) μ΄ˆκΈ°ν™” μ΄μ „μ˜ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€
(2) λ³€μˆ˜ μ„ μ–Έλ¬Έμ—μ„œ μ΄ˆκΈ°ν™” 단계 μ‹€ν–‰
(5) ν• λ‹Ήλ¬Έμ—μ„œ ν• λ‹Ή 단계 μ‹€ν–‰

2) μ •λ‹΅ 및 ν•΄μ„€

μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(TDZ)λž€ μŠ€μ½”ν”„μ˜ μ‹œμž‘ μ‹œμ λΆ€ν„° μ΄ˆκΈ°ν™” μ‹œμž‘ μ§€μ κΉŒμ§€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†λŠ” ꡬ간을 λœ»ν•œλ‹€.
(1)

πŸ“Œλ¬Έμ œ2

λ‹€μŒ λ¬Έμž₯의 true or falseλ₯Ό νŒλ‹¨ν•˜μ„Έμš”.

(1) ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ 선언해도 λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€.
(2) let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
(3) const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™”λ₯Ό λ™μ‹œμ— ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
(4) const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 값을 λ³€κ²½ν•  수 μžˆλŠ” 방법이 μ—†λ‹€.

μ •λ‹΅ 및 ν•΄μ„€

(1) true
(2) false
(3) true
(4) false
(1) 209p
var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.
μ΄λŠ” μ˜λ„μΉ˜ μ•Šκ²Œ λ³€μˆ˜κ°’μ΄ λ³€κ²½λ˜λŠ” λΆ€μž‘μš©μ„ λ°œμƒμ‹œν‚¨λ‹€.

(2) 213p
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ES6μ—μ„œ λ„μž…λœ let, constλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  선언을 ν˜Έμ΄μŠ€νŒ…ν•œλ‹€.
단, ES6μ—μ„œ λ„μž…λœ let, const, classλ₯Ό μ‚¬μš©ν•œ 선언문은 ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.

(3) 215p
const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€.
그렇지 μ•ŠμœΌλ©΄ 문법 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
(SyntaxError: Missing initializer in const declaration)

(4) 217p
const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— μ›μ‹œ 값을 ν• λ‹Ήν•œ 경우,
μ›μ‹œ 값은 λ³€κ²½ν•  수 μ—†λŠ” 값이고 const ν‚€μ›Œλ“œλ‘œ 인해 μž¬ν• λ‹Ήμ΄ κΈˆμ§€λ˜μ–΄ ν• λ‹Ήλœ 값을 λ³€κ²½ν•  수 μ—†λ‹€.
ν•˜μ§€λ§Œ const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— 객체λ₯Ό ν• λ‹Ήν•œ κ²½μš°μ—λŠ” 값을 λ³€κ²½ν•  수 μžˆλ‹€.
κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 값이기 λ•Œλ¬Έμ— μž¬ν• λ‹Ή 없이도 직접 λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.

πŸ“Œλ¬Έμ œ3

λ‹€μŒ λ¬Έμž₯의 true or falseλ₯Ό νŒλ‹¨ν•˜μ„Έμš”.

1. κ°μ²΄λŠ” 변경이 κ°€λŠ₯ν•˜λ‹€.
2. 객체의 λΆˆλ³€μ„±μœ μ§€λž€ 객체의 μž¬ν• λ‹Ήμ„ κΈˆμ§€ν•˜λŠ”κ²ƒμ„ μ˜λ―Έν•œλ‹€.

μ •λ‹΅ 및 ν•΄μ„€

(1) true
(2) false - 객체의 ν”„λ‘œνΌν‹°,λ©”μ„œλ“œμ˜ λΆˆλ³€μ„ μ˜λ―Έν•œλ‹€. λ”°λΌμ„œ 객체 λ‚΄λΆ€μ˜ 변경사항이 λ°œμƒν–ˆμ„λ•Œ ν”„λ‘œνΌν‹°,λ©”μ„œλ“œλ₯Ό 직접 λ³€κ²½ν•˜μ§€μ•Šκ³ ,
μƒˆλ‘œμš΄ 객체λ₯Ό ν• λ‹Ήν•΄μ€ŒμœΌλ‘œμ¨ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό λ…λ¦½μ μœΌλ‘œ 관리할 수 μžˆκ²Œλœλ‹€.

πŸ“Œλ¬Έμ œ4

λ‹€μŒ μ½”λ“œμ˜ κ²°κ³Όλ₯Ό μ“°μ‹œμ˜€

var x = 1;
let y = 1;
for(var x = 0; x < 1; x++){
    var x = 10; 
    let y = 10;
}
console.log(x);
console.log(y);

μ •λ‹΅ 및 ν•΄μ„€

11
1
var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„λ₯Ό 가지기 λ•Œλ¬Έμ— for λ¬Έ μ•ˆμ—μ„œ μž¬μ„ μ–Έλ  수 μžˆλ‹€.
반면 let ν‚€μ›Œλ“œλŠ” 블둝 μŠ€μ½”ν”„λ₯Ό 가지기 λ•Œλ¬Έμ— for λ¬Έ μ•ˆμ—μ„œ μŠ€μ½”ν”„κ°€ λ”°λ‘œ λ§Œλ“€μ–΄μ§€κ²Œ λœλ‹€.

πŸ“Œλ¬Έμ œ5

μ•„λž˜ μ½”λ“œμ—μ„œ ReferenceErrorκ°€ λ°œμƒν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ 이유λ₯Ό ν˜Έμ΄μŠ€νŒ…, μŠ€μ½”ν”„λ‹¨μ–΄μ™€ ν•¨κ»˜ μž‘μ„±ν•˜μ‹œμ˜€.

let foo = 1; // (1)
{
  console.log(foo);
  let foo = 2; // (2)
}

μ •λ‹΅ 및 ν•΄μ„€

ReferenceError: Cannot access 'foo' before initialization
let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•˜κΈ° 전에 λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•œ μ—λŸ¬μ΄λ‹€.
μœ„ λ¬Έμ œμ—μ„œ 이와 같은 μ—λŸ¬κ°€ λ°œμƒν•œ μ΄μœ λŠ” let ν‚€μ›Œλ“œλ₯Ό 톡해 (2)μ—μ„œ 선언을 ν•˜μ˜€μ§€λ§Œ,
ν˜Έμ΄μŠ€νŒ…μ„ 톡해 블둝({})에 μ§„μž…ν•˜μ˜€μ„ λ•Œ, (console.log보닀) λ¨Όμ € μ„ μ–Έ 단계가 μ§„ν–‰λœλ‹€.
ν•˜μ§€λ§Œ var ν‚€μ›Œλ“œμ™€ λ‹€λ₯΄κ²Œ μ΄ˆκΈ°ν™” λ‹¨κ³„κΉŒμ§€ μ§„ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.
λ”°λΌμ„œ μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ €κ³ ν•˜λ‹ˆ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

λ§Œμ•½ letν‚€μ›Œλ“œκ°€ ν˜Έμ΄μŠ€νŒ…λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄,
console.logμ—μ„œ fooλ³€μˆ˜λ₯Ό μ°ΎκΈ° μœ„ν•΄ μŠ€μ½”ν”„μ²΄μ΄λ‹μ„ 톡해 μƒμœ„ μŠ€μ½”ν”„λ‘œ μ˜¬λΌκ°€λ©΄μ„œ fooλ³€μˆ˜λ₯Ό μ°ΎλŠ”λ‹€.
μƒμœ„ μŠ€μ½”ν”„μ˜ (1)μ—μ„œ fooλ³€μˆ˜λ₯Ό μ°ΎμœΌλ―€λ‘œ 1이 좜λ ₯될 수 μžˆλ‹€.

λ§Œμ•½ (1)의 μ½”λ“œκ°€ μ•„μ˜ˆ μ—†κ³ , let ν‚€μ›Œλ“œκ°€ ν˜Έμ΄μŠ€νŒ… λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, (μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 경우)
ReferenceError: 'foo' is not defined
둜 λ‹€λ₯Έ μ„€λͺ…μ˜ μ—λŸ¬κ°€ 좜λ ₯λœλ‹€.