μλ°μ€ν¬λ¦½νΈ μ€ν 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈκ° μ΄λ»κ² μ½λλ₯Ό μ€ννκ³ λ³μ λ° ν¨μμ μ€μ½νλ₯Ό κ΄λ¦¬νλμ§λ₯Ό μ΄ν΄νλ λ° μ€μν κ°λ μ λλ€. μ΄λ² ν¬μ€ν μμλ μ€ν 컨ν μ€νΈμ κΈ°λ³Έ κ°λ λΆν° κ³ κΈ μ£Όμ κΉμ§ λ¨κ³λ³λ‘ μμλ³΄κ² μ΅λλ€.
β£ λͺ©μ°¨
01. μ€ν 컨ν μ€νΈμ κΈ°λ³Έ κ°λ π‘
μ€ν 컨ν μ€νΈ μ μ
μ€ν 컨ν μ€νΈλ νΉμ μ½λκ° μ€νλ λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ ν΄λΉ μ½λμ λν΄ μμ±νλ νκ²½μ λλ€.
μ€ν 컨ν μ€νΈμ μμ±κ³Όμ
μ½λκ° μ€νλ λ μ€ν 컨ν μ€νΈκ° μμ±λκ³ , μ΄λ νΈμΆ μ€ν(Call Stack)μ μμ λλ€.
νΈμΆ μ€ν(Call Stack)κ³Όμ κ΄κ³
νΈμΆ μ€νμ μ€ν 컨ν μ€νΈκ° μμ΄λ ꡬ쑰μ λλ€. νΈμΆλ ν¨μλ€μ΄ μμλλ‘ μ€νμ μμ΄κ³ , μ€νμ΄ μλ£λλ©΄ μ€νμμ μ κ±°λ©λλ€.
02. μ€ν 컨ν μ€νΈμ κ΅¬μ± μμπ
λ³μ κ°μ²΄(Variable Object)
λ³μ κ°μ²΄λ μ€ν 컨ν μ€νΈκ° μμ±λ λ ν¨κ» μμ±λλ©°, ν¨μ λ΄μ λ³μ λ° ν¨μ μ μΈμ ν¬ν¨ν©λλ€.
μ€μ½ν 체μΈ(Scope Chain)
μ€μ½ν 체μΈμ λ³μ κ°μ²΄λ₯Ό ν΅ν΄ λ³μλ₯Ό κ²μνλ ꡬ쑰μ λλ€. μ΄λ νμ¬ μ€ν 컨ν μ€νΈμ μμ 컨ν μ€νΈμ λ³μ κ°μ²΄λ₯Ό ν¬ν¨ν©λλ€.
this λ°μΈλ©(this binding)
this λ°μΈλ©μ μ€ν 컨ν μ€νΈκ° μμ±λ λ κ²°μ λ©λλ€. μ΄λ νΈμΆν κ°μ²΄λ₯Ό μ°Έμ‘°ν©λλ€.
μ€μ½ν 체μΈκ³Ό thisμ κ΄ν λ΄μ©μ μλ ν¬μ€ν
μ μ°Έκ³ ν΄ μ£ΌμΈμπ
03. μ½λ μ€ν κ³Όμ μμμ μ€ν 컨ν μ€νΈπ
μ μ 컨ν μ€νΈ(Global Context)
μ μ 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈ μ½λκ° μ²μ μ€νλ λ μμ±λλ 컨ν μ€νΈμ λλ€.
ν¨μ 컨ν μ€νΈ(Function Context)
ν¨μ 컨ν μ€νΈλ ν¨μκ° νΈμΆλ λλ§λ€ μμ±λλ μ€ν 컨ν μ€νΈμ λλ€.
Eval 컨ν μ€νΈ(Eval Context)
Eval 컨ν μ€νΈλ eval() ν¨μλ₯Ό νΈμΆν λ μμ±λ©λλ€.
04. μ€ν 컨ν μ€νΈ μμ μ½λπ₯οΈ
// μ μ 컨ν
μ€νΈ μμ
var a = 10;
function foo() {
console.log(a); // 10
}
foo();
// ν¨μ 컨ν
μ€νΈ μμ
function bar() {
var b = 20;
function inner() {
console.log(b); // 20
}
inner();
}
bar();
// μ€μ²© ν¨μμ μ€ν 컨ν
μ€νΈ μμ
function outer() {
var c = 30;
function middle() {
var d = 40;
function inner() {
console.log(c, d); // 30 40
}
inner();
}
middle();
}
outer();
05. μλ°μ€ν¬λ¦½νΈ μμ§μ μ€ν 컨ν μ€νΈ κ΄λ¦¬βοΈ
μ€ν 컨ν μ€νΈ μμ±κ³Ό μλ©Έ
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ νΈμΆ μ μλ‘μ΄ μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ , ν¨μ μ€νμ΄ λλλ©΄ μ΄λ₯Ό μλ©Έμν΅λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ μ΅μ ν κΈ°λ²
μλ°μ€ν¬λ¦½νΈ μμ§μ μ€ν 컨ν μ€νΈλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν΄ λ€μν μ΅μ ν κΈ°λ²μ μ¬μ©ν©λλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ°λΉμ§ 컬λ μ (Garbage Collection)
μ€ν 컨ν μ€νΈκ° μλ©Έλλ©΄, λ©λͺ¨λ¦¬μμ κ΄λ ¨ λ³μμ ν¨μλ μ κ±°λ©λλ€. μ΄λ κ°λΉμ§ 컬λ ν°κ° μλμΌλ‘ μ²λ¦¬ν©λλ€.
06. μ€ν 컨ν μ€νΈμ κ΄λ ¨λ μ€λ₯ ν΄κ²° λ°©λ²π§
'undefined' μ€λ₯ μ²λ¦¬
μ€ν 컨ν μ€νΈμμ λ³μ μ μΈμ΄ νΈμ΄μ€ν λμ§λ§ μ΄κΈ°νλμ§ μμ λ°μνλ 'undefined' μ€λ₯λ₯Ό μ²λ¦¬ν©λλ€.
'this' λ°μΈλ© λ¬Έμ ν΄κ²°
this λ°μΈλ©μ΄ μμκ³Ό λ€λ₯΄κ² λμν λ, λͺ νν λ°μΈλ©μ μν΄ call, apply, bind λ©μλλ₯Ό μ¬μ©ν©λλ€.
μ€μ½ν μ²΄μΈ λ¬Έμ ν΄κ²°
μ€μ½ν 체μΈμμ λ³μ κ²μμ΄ μ΄λ €μ΄ κ²½μ°, ν΄λ‘μ λ₯Ό νμ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.