13.1 μ€μ½νλ?
λͺ¨λ μλ³μ(λ³μ μ΄λ¦, ν¨μ μ΄λ¦, ν΄λμ€ μ΄λ¦ λ±)λ μμ μ΄ μ μΈλ μμΉμ μν΄ λ€λ₯Έ μ½λκ° μλ³μ μμ μ μ°Έμ‘°ν μ μλ μ λ²μκ° κ²°μ λλΉλ€. μ΄λ₯Ό μ€μ½νλΌκ³ ν©λλ€. μ¦ μ€μ½νλ μλ³μκ° μ ν¨ν λ²μλ₯Ό λ§ν©λλ€.
var x = 'global'
function foo() {
var x = 'local'
console.log(x) //local
}
foo()
console.log(x) //global
13.2 μ€μ½νμ μ’ λ₯
μ½λλ μ μκ³Ό μ§μμΌλ‘ ꡬλΆν μ μμ΅λλ€
13.2.1 μ μκ³Ό μ§μ μ€μ½ν
μ μμ΄λ μ½λμ κ°μ₯ λ°κΉ₯ μμμ λ§ν©λλ€. μ μμ μ μ μ€μ½νλ₯Ό λ§λλλ€. μ μ λ³μλ μ΄λμλ μ°Έμ‘°ν μ μμ΅λλ€.
13.2.2 μ§μκ³Ό μ§μ μ€μ½ν
μ§μμ΄λ ν¨μ λͺΈμ²΄ λ΄λΆλ₯Ό λ§ν©λλ€. μ§μμ μ§μ μ€μ½ν (local scope)λ₯Ό λ§λλλ€. μ§μ λ³μλ μμ μ μ§μ μ€μ½νμ νμ μ§μ μ€μ½νμμ μ ν¨ν©λλ€ .
13.3 μ€μ½ν 체μΈ
ν¨μλ μ€μ²©λ μ μμΌλ―λ‘ ν¨μμ μ§μ μ€μ½νλ μ€μ΄λ μ μμ΅λλ€. μ΄λ μ€μ½νκ° ν¨μμ μ€μ²©μ μν΄ κ³μΈ΅μ ꡬ쑰λ₯Ό κ°λλ€λ κ²μ μλ―Έν©λλ€.
13.4 ν¨μ λ 벨 μ€μ½ν
μ½λ λΈλ‘μ΄ μλ ν¨μμ μν΄μλ§ μ§μ μ€μ½νκ° μμ±λ©λλ€. Cλ μλ° λ±μ νλ‘κ·Έλλ° μΈμ΄λ ν¨μ λͺΈμ²΄λ§μ΄ μλλΌ λͺ¨λ μ½λ λΈλ‘ (if , for, while, try/catch λ±)μ΄ μ§μ μ€μ½νλ₯Ό λ§λλλ€. μ΄ νΉμ±μ λΈλ‘ λ 벨 μ€μ½ν (block level scope)λΌκ³ ν©λλ€.
νμ§λ§ var ν€μλλ‘ μ μΈλ λ³μλ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ ν©λλ€. λ°λΌμ μλμΉ μκ² μ μ λ³μμ κ°μ΄ μ¬ν λΉλλ λ±μ λ¬Έμ κ° λ°μν©λλ€.
ES6μμ λμ
λ let, const ν€μλλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ§μνλ―λ‘ ν΄λΉ λΆμμ©μ λ°©μ§ν μ μμ΅λλ€.
13.5 λ μ컬 μ€μ½ν
1. ν¨μλ₯Ό μ΄λμ νΈμΆνλλ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ€.
2. ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ€.
μλ°μ€ν¬λ¦½νΈλ λ μ컬 μ€μ½νλ₯Ό λ€λ₯΄λ―λ‘ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλλΌ ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ ν©λλ€. ν¨μκ° νΈμΆλ μμΉλ μμ μ€μ½ν κ²°μ μ μ΄λ ν μν₯μ μ£Όμ§ μμ΅λλ€.
ν¨μμ μμ μ€μ½νλ μΈμ λ μμ μ΄ μ μλ μ€μ½νμ
λλ€. ν¨μμ μμ μ€μ½νλ ν¨μ μ μκ° μ€νλ λ μ μ μΌλ‘ κ²°μ λ©λλ€. ν¨μ μ μκ° μ€νλμ΄ μμ±λ ν¨μ κ°μ²΄λ μ΄λ κ² κ²°μ λ μμ μ€μ½νλ₯Ό κΈ°μ΅ν©λλ€.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo();
bar();
λͺ¨λ 1μ΄λΌλ κ²°κ³Όκ° λμ€κ² λ©λλ€.
Reference: λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive