Scope
Scope
Javascript μ μ€μ½νλ λ³μ (κ°μ²΄) κ° μ°Έμ‘°κ°λ₯ν μ ν¨λ²μ λ₯Ό λ»νλ©° λνμ μΌλ‘ μλ λκ°λ‘ ꡬλΆλλ€.
- λ μ컬 μ€μ½ν (Lexical Scope)
- λμ μ€μ½ν (Dynamic Scope)
κΈ°λ³Έμ μΌλ‘ Javascript λ λ μ컬 μ€μ½ν (Lexical Scope) λ₯Ό λ°λ₯Έλ€.
λ μ컬 μ€μ½ν (Lexical Scope)
μ€μ½νλ ν¨μλ₯Ό νΈμΆν λκ° μλλΌ μ μΈν λ μμ± λλ€.
μ΄κ²μ λ μ컬 μ€μ½νμ νΉμ§μ΄λ©° λμ μ€μ½νμ λΉκ΅λλ€.
μλ μμμμλ μ μΈν λ μμ±λλ κ²μ νμΈν μ μλ€.
var color = 'red';
function foo() {
var color = 'blue';
function bar() {
console.log(color);
}
return bar;
}
var baz = foo();
baz();
blue
- ES5λ ν¨μλ 벨μ λ μ컬 μ€μ½νλ₯Ό κ°μ§λ€.
- ES6λ ν¨μλ 벨과 λΈλ‘λ 벨μ λ μ컬 μ€μ½νλ₯Ό κ°μ§λ€.
λμ μ€μ½ν (Dynamic Scope)
ν¨μκ° μ΄λμ νΈμΆλμλμ§μ λ°λΌ μμ μ€μ½νκ° κ²°μ
function foo() {
console.log(x);
}
function bar() {
var x = 15;
foo();
}
var x = 10;
foo();
bar();
λ μ컬 μ€μ½ν κ°μ μ
10
10
λμ μ€μ½ν κ°μ μ
10
15
Closer
μΈλΆν¨μμ λ³μμ μ κ·Όν μ μλ λ΄λΆν¨μλ₯Ό λ§νλ€.
μΌλ°μ μΌλ‘ μ€μ½ν 체μΈμ ννλλλ° λνμ μΌλ‘ 3κ°μ§μ μ€μ½ν 체μΈμ κ°μ§λ€.
- μκΈ° μμ μ λν μ κ·Ό (μκΈ° λΈλ)
- μΈλΆ ν¨μ (λΆλͺ¨ λ° μμ ν¨μ) μ λν μ κ·Ό
- μ μ λ³μμ λν μ κ·Ό
function celebrityID() {
var celebrityID = 999;
// μ°λ¦¬λ λͺκ°μ λ΄λΆ ν¨μλ₯Ό κ°μ§ κ°μ²΄λ₯Ό 리ν΄ν κ²μ
λλ€.
// λͺ¨λ λ΄λΆν¨μλ μΈλΆλ³μμ μ κ·Όν μ μμ΅λλ€.
return {
getID: function() {
// μ΄ λ΄λΆν¨μλ κ°±μ λ celebrityIDλ³μλ₯Ό 리ν΄ν©λλ€.
// μ΄κ²μ changeThdIDν¨μκ° κ°μ λ³κ²½ν μ΄νμλ celebrityIDμ νμ¬κ°μ 리ν΄ν©λλ€.
return celebrityID;
},
setID: function(theNewID) {
// μ΄ λ΄λΆν¨μλ μΈλΆν¨μμ κ°μ μΈμ λ μ§ λ³κ²½ν κ²μ
λλ€.
celebrityID = theNewID;
}
}
}
var mjID = celebrityID(); // μ΄ μμ μ, celebrityIDμΈλΆ ν¨μκ° λ¦¬ν΄λ©λλ€.
mjID.getID(); // 999
mjID.setID(567); // μΈλΆν¨μμ λ³μλ₯Ό λ³κ²½ν©λλ€.
mjID.getID(); // 567; λ³κ²½λ celebrityIDλ³μλ₯Ό 리ν΄ν©λλ€.
μνμ°Έμ‘°
μ΄λ μλͺ»λ ν΄λ‘μ μ¬μ©μ μλ‘κ° μλ‘λ₯Ό μ°Έμ‘°νλ μν μ°Έμ‘° νμμ΄ λ°μ λ μ μλ€.
μνμ°Έμ‘°κ° λ°μλλ©΄ GC (Gabege Collection) λμμμ λ²μ΄λκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ λμμ μμΈμΌλ‘ μμ¬νκ² λλ€.
β Memory Leak NetFunnel β