λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive - μ€μ½ν
μ€μ½ν
μ€μ½νλ μλ³μκ° μ ν¨ν λ²μλ₯Ό λ»νλ€.
μ¬κΈ°μ μλ³μλ λ³μ, ν¨μ, ν΄λμ€ μ΄λ¦ λ±μ λ» νλ€.
μ°μ μ€μ½νλ μ μΈλ μμΉμ λ°λΌ ν¬κ² μ§μ μ€μ½ν, μ μ μ€μ½νλ‘ λλλ€.
μ§μ μ€μ½ν
μ§μμ΄λ ν¨μ λͺΈμ²΄ λ΄λΆλ₯Ό λ»νλ€.
κ·Έλ¬λ―λ‘ ν¨μ λ΄λΆ λλ λΈλ‘ λ΄λΆμμ λ³μλ₯Ό μ μΈνλ©΄ μ§μ μ€μ½νλ₯Ό κ°μ§λ μ§μ λ³μκ° λλ©°
μ§μ λ³μλ μμ μ μ§μ μ€μ½νμ νμ μ§μ μ€μ½νμμλ§ μ°Έμ‘° κ°λ₯νλ€.
μ μ μ€μ½ν
μ μμ΄λ μ½λμ κ°μ₯ λ°κΉ₯μͺ½ μμμ λ§νλ€.
κ·Έλ¬λ―λ‘ μ μμ λ³μλ₯Ό μ μΈνλ©΄ μ μ μ€μ½νλ₯Ό κ°μ§λ μ μ λ³μκ° λλ©°
μ μ λ³μλ μ΄λμλ μ°Έμ‘° κ°λ₯νλ€.
var x = 'global' // μ μ μ€μ½ν, μ μ λ³μ
function outer(){ // μ§μ μ€μ½ν
var z = 'local' // μ§μ λ³μ
function inner(){ // μ§μ μ€μ½ν
var q = 'local' // μ§μ λ³μ
console.log(x)
console.log(z)
}
}
console.log(z)
inner ν¨μ μμμμ
λ³μ xλ μ μ λ³μλ‘ λͺ¨λ κ³³μμ μ°Έμ‘°ν μ μκ³ ,
λ³μ zλ μ§μ λ³μλ‘ νμ μ€μ½νμμλ μ°Έμ‘° κ°λ₯νκΈ° λλ¬Έμ
console.log(x), console.log(z)λ 'global', 'local'μ μ μμ μΌλ‘ μΆλ ₯νλ€.
νμ§λ§
λ³μ zμ μ ν¨ν μ€μ½ν λ²μλ μμ μ΄ μν outer ν¨μμ λ΄λΆ μ§μ μ€μ½νκΉμ§λ§ μ ν¨νκΈ° λλ¬Έμ
μ μμμ console.log(z)λ₯Ό νΈμΆνλ©΄ μ°Έμ‘° μλ¬κ° λ°μνλ€.
μ€μ½ν 체μΈ
μ€μ½ν 체μΈμ΄λ μ€μ½νκ° κ³μΈ΅μ μΌλ‘ μ°κ²°λ κ²μ λ§νλ€.
μμ κ·Έλ¦Όμ μμλ‘ λ€λ©΄
λ€μκ³Ό κ°μ μ€μ½ν 체μΈμ κ°μ§λ€.
μ μ μ€μ½ν | |
x | 'global' |
outer | <function object> |
↑
outer μ§μ μ€μ½ν | |
z | 'local' |
inner | <function object> |
↑
inner μ§μ μ€μ½ν | |
q | 'local' |
μμ μμ μ²λΌ ν¨μμ μ€μ²©μ΄ λ°μνλ©΄ μ€μ½ν λν μ€μ²©μ μν κ³μΈ΅ ꡬ쑰λ₯Ό κ°μ§λ€.
κ·Έλ¦¬κ³ λͺ¨λ μ§μ μ€μ½νμ μ΅μμ μ€μ½νλ μ μ μ€μ½νμ΄λ€.
μ€μ½ν 체μΈμμ μλ³μ μ°ΎκΈ°
μ°μ μ€μ½ν 체μΈμ κ³μΈ΅ ꡬ쑰λ₯Ό κ°μ§λ©°
μμ μ€μ½νμμ μ ν¨ν λ³μλ νμ μ€μ½νμμ μμ λ‘κ² μ°Έμ‘° κ°λ₯νμ§λ§
νμ μ€μ½νμμ μ ν¨ν λ³μλ₯Ό μμ μ€μ½νμμλ μ°Έμ‘° λΆκ°λ₯ νλ€.
μ¦ μ€μ½ν 체μΈμ ν΅ν΄ μλ³μλ₯Ό μ°Ύμ λμλ νμ¬ μμ μ μ€μ½νμμ λ¨Όμ μλ³μλ₯Ό μ°Ύκ³
μμΌλ©΄ κ³μν΄μ μμ μ€μ½νλ‘ μ¬λΌκ°λ©΄μ μλ³μλ₯Ό μ°Ύλλ€.
ν¨μμ μμ μ€μ½ν κ²°μ
μλ°μ€ν¬λ¦½νΈμμ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©λ²μ λ μ컬 μ€μ½ν(μ μ μ€μ½ν)λ₯Ό λ°λ₯Έλ€.
λ μ컬 μ€μ½νλ ν¨μκ° μ μλ λ μ΄λμ μ μνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ κ²μ λ§νλ€.
var x = 'global'
function foo(){
var x = 'local'
bar()
}
function bar(){
console.log(x)
}
foo()
bar()
μμ μμ λ₯Ό μ€ννμ λ λ΅μ 'global' λ λ² μΆλ ₯λλ€.
μ΄μ λ barμ μμ μ€μ½νλ fooν¨μμμ barκ° νΈμΆλ λ κ²°μ λλ κ² μλλΌ
bar ν¨μκ° μ μλ λ μμ μ€μ½νκ° κ²°μ λλ©°
barν¨μμμ μΆλ ₯νκ³ μ νλ λ³μ xλ μ μμμ μ μΈν λ³μ x μ΄κΈ° λλ¬Έμ΄λ€.