Execution Context
μλ°μ€ν¬λ¦½νΈ μμ§λ νλμ (κ±°λν) ν¨μλ€.
ν¨μ?
νλ‘κ·Έλ¨μ λ§λλ κ°λ°μκ° νλ μΌμ λ³μλ₯Ό μ μΈνκ³ , μ¬λ¬κ°μ§ λͺ¨λ(ν¨μ)λ₯Ό λ§λ€μ΄ νλμ μ΄ν리μΌμ΄μ μΌλ‘ ν©μΉλ κ³Όμ μ΄λ€.
λͺ¨λνλ₯Ό ν΅ν΄ μ»λ μ΄μ μ€ λ κ°μ§λ λ³μ μΆ©λμ λ§λλ€. μ§μ λ³μλ₯Ό μ¬μ©ν΄ ν¨μκ° μ€νλ λλ§ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ€.
ν¨μλ λ³ΈμΈμ μ€ν λ¬Έλ§₯μ κ°μ§λ€.
μ°λ¦¬κ° μ΅μν ν¨μ, call stack κ·Έλ¦¬κ³ λ³μλ₯Ό λ¨Όμ μ΄ν΄λ³΄μ. ν¨μκ° μ€νλλ©΄ call stackμ μμ΄κ³ returnμ pop λλ€. λλΆμ΄ ν¨μκ° μ€νλλ©΄ μ€ν λ¬Έλ§₯(Execution context)μ΄ μκΈ΄λ€.

κ°λ°μ νλ€λ³΄λ©΄ Context, νΉμ μ€ν λ¬Έλ§₯μ΄λΌλ λ¨μ΄λ₯Ό λ§μ΄ μ νκ² λλ€.
μ€ν 컨ν μ€νΈλ scope, hoisting, this, function, closure λ± Javascriptμ λμμ리λ₯Ό μ€λͺ νλλ° ν΅μ¬μ΄ λλ κ°λ μ΄λ€.
μ°μ μ μλ₯Ό μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
μ€ν κ°λ₯ν μ½λλ₯Ό νμννκ³ κ΅¬λΆνλ μΆμμ μΈ κ°λ
λ μ½κ² μ μνμ.
μ€ν κ°λ₯ν μ½λκ° (μ€νλκΈ° μν΄ νμν or μ€νλλ) νκ²½
κ·Έλ λ€λ©΄ μ€ν κ°λ₯ν μ½λλ 무μμΌκΉ?
μ μ μ½λ : μ μ μμμ μ‘΄μ¬νλ μ½λ
Eval μ½λ : eval ν¨μλ‘ μ€νλλ μ½λ
ν¨μ μ½λ : ν¨μ λ΄μ μ‘΄μ¬νλ μ½λ
μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€ννκΈ° μνμ¬ μ€νμ νμν μ¬λ¬κ°μ§ μ 보λ₯Ό μκ³ μμ΄μΌ νλ€.
μ€νμ νμν μ¬λ¬κ°μ§ μ 보λ μλμ κ°μ κ²λ€μ΄ μλ€.
λ³μ : μ μλ³μ, μ§μλ³μ, λ§€κ°λ³μ, κ°μ²΄μ Property
ν¨μ μ μΈ
λ³μμ μ ν¨λ²μ(Scope)
this
κ°μμ€λ½μ§λ§, μ½λλ₯Ό 보면μ μ€λͺ μ μ΄μ΄κ°κ² λ€.
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();
μ μ½λλ₯Ό μ€ννλ©΄ μλμ κ°μ΄ μ€ν 컨ν μ€νΈ μ€ν(Stack)μ΄ μμ±νκ³ μλ©Ένλ€.

νμ¬ μ€ν μ€μΈ 컨ν μ€νΈμμ μ΄ μ»¨ν μ€νΈμ κ΄λ ¨μλ μ½λ (μλ₯Ό λ€μ΄ λ€λ₯Έ ν¨μ)κ° μ€νλλ©΄ μλ‘μ΄ μ»¨ν μ€νΈκ° μμ±λλ€.
μ΄ μ»¨ν μ€νΈλ μ€νμ μμ΄κ² λκ³ μ»¨νΈλ‘€(μ μ΄κΆ)μ΄ μ΄λνλ€.
μ μ μ½λ(Global code)λ‘ μ»¨νΈλ‘€μ΄ μ§μ νλ©΄ μ μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ μ€ν 컨ν μ€νΈ μ€νμ μμΈλ€. μ μ μ€ν 컨ν μ€νΈλ μ ν리μΌμ΄μ μ΄ μ’ λ£λ λ(μΉ νμ΄μ§μμ λκ°κ±°λ λΈλΌμ°μ λ₯Ό λ«μ λ)κΉμ§ μ μ§λλ€.
컨νΈλ‘€μ΄ μ€ν κ°λ₯ν μ½λλ‘ μ΄λνλ©΄ λ Όλ¦¬μ μ€ν ꡬ쑰λ₯Ό κ°μ§λ μλ‘μ΄ μ€ν 컨ν μ€νΈ μ€νμ΄ μμ±λλ€.
ν¨μλ₯Ό νΈμΆνλ©΄ ν΄λΉ ν¨μμ μ€ν 컨ν μ€νΈκ° μμ±λλ©° μ§μ μ μ€νλ μ½λ λΈλ‘μ μ€ν 컨ν μ€νΈ μμ μμΈλ€.
ν¨μ μ€νμ΄ λλλ©΄ ν΄λΉ ν¨μμ μ€ν 컨ν μ€νΈλ₯Ό νκΈ°νκ³ μ§μ μ μ€ν 컨ν μ€νΈμ 컨νΈλ‘€μ λ°ννλ€.
Execution Contextμ 3κ°μ§ κ°μ²΄
μ€ν 컨ν μ€νΈλ μ€ν κ°λ₯ν μ½λλ₯Ό νμννκ³ κ΅¬λΆνλ μΆμμ μΈ κ°λ μ΄μ§λ§ 물리μ μΌλ‘λ κ°μ²΄μ ννλ₯Ό κ°μ§λ©° μλμ 3κ°μ§ νλ‘νΌν°λ₯Ό μμ νλ€.

1. Variable Object
μ€ν 컨ν μ€νΈκ° μ€νλλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€νμ νμν μ¬λ¬ μ 보λ€μ λ΄μ κ°μ²΄λ₯Ό μμ±νλ€.
μ΄λ₯Ό Variable Object(μ΄ν VO)λΌκ³ νλ€. VOλ μ½λκ° μ€νλ λ μμ§μ μν΄ μ°Έμ‘°λλ©° μ½λμμλ μ κ·Όν μ μλ€.
VOλ λ³μ, λ§€κ° λ³μ(parameter)μ μΈμ μ 보(arguments), ν¨μ μ μΈ(ν¨μ ννμμ μ μΈ)μ κ°μ μ 보λ€μ λ΄λλ€.
VOλ μ€ν 컨ν μ€νΈμ νλ‘νΌν°μ΄κΈ° λλ¬Έμ κ°μ κ°μ§λλ°, μ΄ κ°μ λ€λ₯Έ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
κ·Έλ°λ° μ μ μ½λ μ€νμ μμ±λλ μ μ 컨ν μ€νΈμ κ²½μ°μ ν¨μλ₯Ό μ€νν λ μμ±λλ ν¨μ 컨ν μ€νΈμ κ²½μ°, κ°λ¦¬ν€λ κ°μ²΄κ° λ€λ₯΄λ€.
μ΄λ μ μ μ½λμ ν¨μμ λ΄μ©μ΄ λ€λ₯΄κΈ° λλ¬Έμ΄λ€. μλ₯Ό λ€μ΄ μ μ μ½λμλ λ§€κ°λ³μκ° μμ§λ§ ν¨μμλ λ§€κ°λ³μκ° μλ€.
μ μ 컨ν μ€νΈμ κ²½μ°, VOλ μ μΌνλ©° μ΅μμμ μμΉνκ³ λͺ¨λ μ μ λ³μ, μ μ ν¨μ λ±μ ν¬ν¨νλ μ μ κ°μ²΄(Global Object)λ₯Ό κ°λ¦¬ν¨λ€.
μ μ κ°μ²΄λ μ μμ μ μΈλ μ μ λ³μμ μ μ ν¨μλ₯Ό νλ‘νΌν°λ‘ μμ νλ€.

ν¨μ 컨ν μ€νΈμ κ²½μ°, VOλ νμ± κ°μ²΄(Activation Object)λ₯Ό κ°λ¦¬ν€λ©° λ§€κ° λ³μμ μΈμλ€μ μ 보λ₯Ό λ°°μ΄μ ννλ‘ λ΄λ arguments objectκ° μΆκ°λλ€.

2. Scope chain
μ€μ½ν 체μΈμ μΌμ’ μ 리μ€νΈλ‘μ μ μ κ°μ²΄μ μ€μ²©λ ν¨μ μ€μ½νμ λ νΌλ°μ€λ₯Ό μ°¨λ‘λ‘ μ μ₯νκ³ μλ€.
λ€μ λ§ν΄, μ€μ½ν 체μΈμ ν΄λΉ μ μ λλ ν¨μκ° μ°Έμ‘°ν μ μλ λ³μ, ν¨μ μ μΈ λ±μ μ 보λ₯Ό λ΄κ³ μλ μ μ κ°μ²΄(GO) λλ νμ± κ°μ²΄(AO)μ 리μ€νΈλ₯Ό κ°λ¦¬ν¨λ€.

νμ¬ μ€ν 컨ν μ€νΈμ νμ± κ°μ²΄(AO)λ₯Ό μ λλ‘ νμ¬ μμ°¨μ μΌλ‘ μμ 컨ν μ€νΈμ νμ± κ°μ²΄(AO)λ₯Ό κ°λ¦¬ν€λ©° λ§μ§λ§ 리μ€νΈλ μ μ κ°μ²΄(GO)λ₯Ό κ°λ¦¬ν¨λ€.
μ€μ½ν 체μΈμ μλ³μ μ€μμ κ°μ²΄(μ μ κ°μ²΄ μ μΈ)μ νλ‘νΌν°κ° μλ μλ³μ, μ¦ λ³μλ₯Ό κ²μνλ λ©μ»€λμ¦μ΄λ€.
μλ³μ μ€μμ λ³μκ° μλ κ°μ²΄μ νλ‘νΌν°(λ¬Όλ‘ λ©μλλ ν¬ν¨λλ€)λ₯Ό κ²μνλ λ©μ»€λμ¦μ νλ‘ν νμ 체μΈ(Prototype Chain)μ΄λ€.
μμ§μ μ€μ½ν 체μΈμ ν΅ν΄ λ μ컬 μ€μ½νλ₯Ό νμ νλ€.
ν¨μκ° μ€μ²© μνμΌ λ νμν¨μ λ΄μμ μμν¨μμ μ€μ½νμ μ μ μ€μ½νκΉμ§ μ€μ½ν μ²΄μΈ κ²μμ ν΅ν΄ μ°Έμ‘°ν μ μλ€.
ν¨μκ° μ€μ²©λμ΄ μμΌλ©΄ μ€μ²©λ λλ§λ€ λΆλͺ¨ ν¨μμ Scopeκ° μμ ν¨μμ μ€μ½ν 체μΈμ ν¬ν¨λλ€.
ν¨μ μ€νμ€μ λ³μλ₯Ό λ§λλ©΄ κ·Έ λ³μλ₯Ό μ°μ νμ¬ Scope, μ¦ Activation Objectμμ κ²μν΄λ³΄κ³ , λ§μ½ κ²μμ μ€ν¨νλ©΄ μ€μ½ν 체μΈμ λ΄κ²¨μ§ μμλλ‘ κ·Έ κ²μμ μ΄μ΄κ°κ² λλ κ²μ΄λ€.
μ΄κ²μ΄ μ€μ½ν 체μΈμ΄λΌκ³ λΆλ¦¬λ μ΄μ μ΄λ€.
μλ₯Ό λ€μ΄ ν¨μ λ΄μ μ½λμμ λ³μλ₯Ό μ°Έμ‘°νλ©΄ μμ§μ μ€μ½ν 체μΈμ 첫λ²μ§Έ 리μ€νΈκ° κ°λ¦¬ν€λ AOμ μ κ·Όνμ¬ λ³μλ₯Ό κ²μνλ€.
λ§μΌ κ²μμ μ€ν¨νλ©΄ λ€μ 리μ€νΈκ° κ°λ¦¬ν€λ Activation Object(λλ μ μ κ°μ²΄)λ₯Ό κ²μνλ€.
μ΄μ κ°μ΄ μμ°¨μ μΌλ‘ μ€μ½ν 체μΈμμ λ³μλ₯Ό κ²μνλλ° κ²°κ΅ κ²μμ μ€ν¨νλ©΄ μ μλμ§ μμ λ³μμ μ κ·Όνλ κ²μΌλ‘ νλ¨νμ¬ Reference μλ¬λ₯Ό λ°μμν¨λ€.
3. this value
this νλ‘νΌν°μλ this κ°μ΄ ν λΉλλ€.
thisμ ν λΉλλ κ°μ ν¨μ νΈμΆ ν¨ν΄μ μν΄ κ²°μ λλ€.
Javaμμμ thisλ μκΈ° μμ (self)λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘° λ³μμ΄λ€.
κ·Έλ¬λ javascriptμμλ κ·Έλ μ§ μλ€.
μλ°μ€ν¬λ¦½νΈμ κ²½μ° Javaμ κ°μ΄ thisμ λ°μΈλ©λλ κ°μ²΄λ ν κ°μ§κ° μλλΌ ν΄λΉ ν¨μ νΈμΆ λ°©μμ λ°λΌ thisμ λ°μΈλ©λλ κ°μ²΄κ° λ¬λΌμ§λ€.
λ€μ λ§ν΄, ν¨μλ₯Ό μ μΈν λ thisμ λ°μΈλ©ν κ°μ²΄κ° μ μ μΌλ‘ κ²°μ λλ κ²μ΄ μλκ³ , ν¨μλ₯Ό νΈμΆν λ ν¨μκ° μ΄λ»κ² νΈμΆλμλμ§μ λ°λΌ thisμ λ°μΈλ©ν κ°μ²΄κ° λμ μΌλ‘ κ²°μ λλ€.
Sources β¦
Last updated