π μ€ν 컨ν μ€νΈ 곡λΆν΄μΌνλ μ΄μ
μ€ν 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈ λμ μ리λ₯Ό λ΄κ³ μλ ν΅μ¬ κ°λ μ΄λ€ βββ
β μλ°μ€ν¬λ¦½νΈκ° μ€μ½νλ₯Ό κΈ°λ°μΌλ‘ μλ³μμ μλ³μμ λ°μΈλ© λ κ°μ κ΄λ¦¬νλ λ°©μ
β νΈμ΄μ€ν μ΄ λ°μνλ μ΄μ
β ν΄λ‘μ μ λμ λ°©μ
β νμ€ν¬ νμ ν¨κ» λμνλ μ΄λ²€νΈ ν¨λ€λ¬
β λΉλκΈ° μ²λ¦¬μ λμ λ°©μ
μ€ν 컨ν μ€νΈλ₯Ό μ΄ν΄νμ λ, μ΄ λͺ¨λ κ²μ μμ°μ€λ½κ² μ΅λν μ μλ€.
π μ€ν 컨ν μ€νΈexecution context
μ½λκ° μ€νλλ €λ©΄ μ€μ½ν, μλ³μ, μ½λ μ€ν μμ λ±μ κ΄λ¦¬κ° νμνλ€.
β μ μΈμ μν΄ μμ±λ λͺ¨λ μλ³μ(λ³μ, ν¨μ, ν΄λμ€..)λ€μ μ€μ½νλ₯Ό ꡬλΆνμ¬ λ±λ‘νκ³
μν λ³ν(μλ³μμ λ°μΈλ©λ κ°μ λ³ν)λ₯Ό μ§μμ μΌλ‘ κ΄λ¦¬ν΄μΌ νλ€.
β μ€μ½νλ μ€μ²© κ΄κ³μ μν΄ μ€μ½ν 체μΈμ νμ±ν΄μΌ νλ€.
μ¦, μ€μ½ν 체μΈμ ν΅ν΄ μμ μ€μ½νλ‘ μ΄λνμ¬ μλ³μλ₯Ό κ²μν μ μμ΄μΌ νλ€.
β νμ¬ μ€ν μ€μΈ μ½λμ μ€ν μμλ₯Ό λ³κ²½(ex. ν¨μ νΈμΆμ μν μ€ν μμ λ³κ²½)ν μ μμ΄μΌ νλ©°,
λ€μ λλμ κ° μλ μμ΄μΌ νλ€.
μ΄ λͺ¨μ€λ κ²μ κ΄λ¦¬νλ κ²μ΄ λ°λ‘ μ€ν 컨ν μ€νΈλ€.
μ€ν 컨ν μ€νΈλ μλ³μ λ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½ν μ μ½λ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ΄λΆ λ©μ»€λμ¦μΌλ‘,
λͺ¨λ μ½λλ μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μ€νλκ³ , κ΄λ¦¬λλ€.
--> μλ³μ μ μ€μ½ν λ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½ μΌλ‘ κ΄λ¦¬νκ³ ,
--> μ½λ μ€ν μμ λ μ€ν 컨ν μ€νΈμ μ€ν μΌλ‘ κ΄λ¦¬νλ€.
π ECMA script code
ECMA script μ¬μμ μμ€ μ½λ(ECMA script code)λ₯Ό 4κ°μ§ νμ μΌλ‘ ꡬλΆνλ€.
ECMA script codeλ₯Ό μμμΌνλ μ΄μ λ, μ΄ μ½λλ€μ΄ μ€ν 컨ν μ€νΈλ₯Ό μμ±νκΈ° λλ¬Έμ΄λ€.
λν μ΄ 4κ°μ§λ μλ‘ λ€λ₯Έ μ€ν 컨ν μ€νΈ μμ± κ³Όμ κ³Ό κ΄λ¦¬ λ΄μ©μ λ€λ£¬λ€.
μ μ μ½λ | global code | μ μμ μ‘΄μ¬νλ μμ€ μ½λ. μ μμ μ μλ ν¨μλ ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨λμ§ μμ. |
μ μ μ½λλ μ μ λ³μλ₯Ό κ΄λ¦¬νκΈ° μν΄ μ΅μμ μ€μ½νμΈ μ μ μ€μ½νλ₯Ό μμ±ν΄μΌ νλ€. | |
ν¨μ μ½λ | function code | ν¨μ λ΄λΆμ μ‘΄μ¬νλ μμ€ μ½λ. ν¨μ λ΄λΆμ μ€μ²©λ ν¨μ, ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨λμ§ μμ. |
ν¨μ μ½λλ μ§μ μ€μ½νλ₯Ό μμ±νκ³ , μ§μ λ³μ, λ§€κ° λ³μ, arguments κ°μ²΄λ₯Ό κ΄λ¦¬ν΄μΌ νλ€. κ·Έλ¦¬κ³ μμ±ν μ§μ μ€μ½νλ₯Ό μ μ μ€μ½ν 체μΈμ μΌμμΌλ‘ μ°κ²°ν΄μΌ νλ€. | |
eval μ½λ | eval code | built-in μ μ ν¨μμΈ eval ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ€νλλ μμ€μ½λ. |
eval μ½λλ strict modeμμ μμ λ§μ λ μμ μΈ μ€μ½νλ₯Ό μμ±νλ€. | |
λͺ¨λ μ½λ | module code | λͺ¨λ λ΄λΆμ μ‘΄μ¬νλ μμ€ μ½λ. λͺ¨λ λ΄λΆμ ν¨μ, ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨λμ§ μμ. |
λͺ¨λ μ½λλ λͺ¨λλ³λ‘ λ 립μ μΈ λͺ¨λ μ€μ½νλ₯Ό μμ±νλ€. |
μ€μ½ν κ°λ μΌλ‘ 보면, λ± ν κ²Ή. ν κ²Ήλ§ λ²κ²¨λ΄μ΄ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ€κ³ 보면 λ κ² κ°λ€.
π μ€ν 컨ν μ€νΈ λμ κ³Όμ
// μ μ
var x = 1;
const y = 2;
// ν¨μ foo
function foo(){
var x = 3;
const y = 4;
// ν¨μ bar
function bar(b){
const z = 5;
console.log(a + b + x + y + z);
}
bar(10);
}
foo(20); // 42
μ μ κ°μ²΄ μμ±
μ μ κ°μ²΄λ μ½λκ° νκ°λκΈ° μ΄μ μ μμ±λλ€.
λΉνΈμΈ μ μ νλ‘νΌν°, λΉνΈμΈ μ μ ν¨μ, νμ€ λΉνΈμΈ κ°μ²΄ ⊂ μ μ κ°μ²΄
ν΄λΌμ΄μΈνΈ μ¬μ΄λ Web API λλ νΈμ€νΈ κ°μ²΄ ⊂ μ μ κ°μ²΄
μ μ κ°μ²΄λ νλ‘ν νμ 체μΈμ μΌμμ΄κΈ°μ Object.prototypeμ μμλ°λλ€.
μ μ μ½λ νκ°
01 μ μ μ€ν 컨ν μ€νΈ μμ± Global Execution Contest
02 μ μ λ μ컬 νκ²½ μμ± Global Lexical Environment
1 μ μ νκ²½ λ μ½λ μμ± Global Environment Record
1-1 κ°μ²΄ νκ²½ λ μ½λ μμ± Object Environment Record
1-2 μ μΈμ νκ²½ λ μ½λ μμ± Declarative Environment Record
2 this λ°μΈλ©
3 μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ OuterLexicalEnvironmentReference
μ μ μ½λ μ€ν
ν¨μ μ½λ νκ°
01 ν¨μ μ€ν 컨ν μ€νΈ μμ± Function Execution Contest
02 ν¨μ λ μ컬 νκ²½ μμ± Function Lexical Environment
1 ν¨μ νκ²½ λ μ½λ μμ± Function Environment Record
2 this λ°μΈλ©
3 μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ OuterLexicalEnvironmentReference
ν¨μ μ½λ μ€ν
μ½λ μ€ν μ’ λ£
μ€ν 컨ν μ€νΈ μ€νμμ ν΄λΉ μ€ν 컨ν μ€νΈκ° μ κ±°λλ€.
μ΄νμ μ€ν 컨ν μ€νΈκ° νμ¬ μ€νμ€μΈ 컨ν μ€νΈκ° λκ³ μ΄ λν μ€νμμ μ κ±°λλ©° λ°λ³΅λ°λ³΅.
----------------------------------------------------------------------------------------------------------------
μ§νκ³Όμ μ λ³΄κ³ μ§κ΄μ μΌλ‘ μ μ μλ μ μ
첫째, μ½λ μ€νκ³Ό λμμ μ μ κ°μ²΄κ° μμ±λλ€.
λμ§Έ, μ½λμ νκ°μ μ€νμ μ°μμ μΈ κ΄κ³λ€.
μ μ§Έ, μ€μ½νμ μ§νκ³Όμ μ 보λ μλ£κ΅¬μ‘° Stackκ³Ό λμΌνκ² μλνλ€.
π μ€ν 컨ν μ€νΈ μ€ν νλμ 보기
μ½λμ νκ°μ μ€νμ λ°λ³΅νλ©° λ§λ€μ΄μ‘λ μ€ν 컨ν μ€νΈλ€μ μ€νμ 차곑차곑 μμΈλ€.
λ§μ§λ§ ν¨μμ μ€ν 컨ν μ€νΈκ° μ€νμ μμμ λ, ν΄λΉ μ½λμ μ€νμ μ’ λ£μν€κ³ LIFO μ°¨λ‘λλ‘ μ½λ μ€νμ μ’ λ£μν¨λ€.
μ€ν μμμ μ μΌ μμͺ½μ μλ μ€ν 컨ν μ€νΈκ° νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈ (λ Ήμ λ°μ€)κ° λλ€. running execution context
νμ¬ μ€νμ€μΈ 컨ν μ€νΈλ μ½λμ μ μ΄κΆμ μ₯κ³ μκΈ° λλ¬Έμ μ€νλλ λμ λ€λ₯Έ μ½λμ μ€νμ μΌμ μ€λ¨λλ€.
π μ€ν 컨ν μ€νΈ λ μ컬 νκ²½ νλμ 보기
---------------------------------------------------------------------------- μ μμ½λ νκ°λΆν°μ€νκΉμ§
βΎ μ½λ νκ°
μ μ μ€ν 컨νμ€νΈλ₯Ό μμ±νμ¬ μ€ν 컨ν μ€νΈ μ€νμ pushνλ€.
μ μ μ€ν 컨ν μ€νΈλ runnung execution contextμ΄λ€.
μ μ λ μ컬 νκ²½μ μμ±νκ³ , μ μ μ€ν 컨ν μ€νΈμ λ°μΈλ©νλ€.
λ μ컬 νκ²½μ νκ²½ λ μ½λμ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ‘ κ΅¬μ±λλ€.
νκ²½ λ μ½λλ
μ μ λ³μλ₯Ό κ΄λ¦¬νλ μ μ μ€μ½ν, μ μ κ°μ²΄μ λΉνΈμΈ μ μ νλ‘νΌν° / λΉνΈμΈ μ μ ν¨μ / νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό μ 곡νλ€.
λͺ¨λ μ μ λ³μκ° μ μ κ°μ²΄μ νλ‘νΌν°κ° λμλ (var) μμ μλ μ μ κ°μ²΄ μμ²΄κ° μ μ νκ²½ λ μ½λμ μν μ μννλ€.
νμ§λ§ μ§μ λ³μ letκ³Ό constμ λ±μ₯μΌλ‘, κΈ°μ‘΄μ var μ μ λ³μμ letμ΄λ constλ‘ μ μΈν μ μλ³μλ₯Ό λλ μ κ΄λ¦¬ν΄μΌνλ€.
νκ²½ λ μ½λλ νμ¬ κ°μ²΄ νκ²½ λ μ½λμ μ μΈμ νκ²½ λ μ½λλ‘ κ΅¬μ±λμ΄ μλ€.
* κ°μ²΄ νκ²½ λ μ½λλ varν€μλλ‘ μ μΈν μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν μ μ ν¨μ, μ μ κ°μ²΄μ λΉνΈμΈ μ μ νλ‘νΌν° / λΉνΈμΈ μ μ ν¨μ / νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό κ΄λ¦¬νλ€. varν€μλλ‘ μ μΈν μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν μ μ ν¨μλ μ°κ²°λ κ°μ²΄ νκ²½ λ μ½λμ BindingObjectλ₯Ό ν΅ν΄ μ μ κ°μ²΄μ νλ‘νΌν°μ λ©μλκ° λλ€.
--> μ΄λ μ°λ¦¬κ° μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ(window)μμ΄ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ λ©μ»€λμ¦μ΄λ€.
--> alertλΌλ λ©μλλ₯Ό μΈ λ window.alertλΌκ³ μμ¨λ λλ κ²μ²λΌ !!!
β λ³μ νΈμ΄μ€ν β (feat. var λ³μμ νΉμ΄μ )
varλ λ νΉν μμ΄λ€. letκ³Ό constμ λ¬λ¦¬ "μ μΈ λ¨κ³"μ "μ΄κΈ°ν λ¨κ³"κ° λμμ μ§νλλ€.
μ μ μ½λ νκ° λ¨κ³μμ κ°μ²΄ νκ²½ λ μ½λμ λ°μΈλ©λ BindingObjectλ₯Ό ν΅ν΄ μ μ κ°μ²΄μ λ³μ μλ³μλ₯Ό ν€λ‘ λ±λ‘ν λ€μ, μ묡μ μΌλ‘ undefinedλ₯Ό λ°μΈλ©νλ€. (letμ΄λ constλ "μ μΈ λ¨κ³"μ "μ΄κΈ°ν λ¨κ³"κ° λΆλ¦¬λμ΄ μ§νλλ€.)
μ΄λ―Έ undefinedμΌλ‘ μ΄κΈ°ν λμ΄μκΈ° λλ¬Έμ μ½λ μ€ν λ¨κ³μμ varμ μ°Έμ‘°ν μ μλ€ !!
varμ΄ μ μΈλ μμΉκ° μ μ΄μ΄μ΄ λ°μ μμ΄λ μ΄λ―Έ μ μ κ°μ²΄μ ν€μ κ°(undefined)μ΄ λ°μΈλ©λμ΄μκΈ°λλ¬Έμ μ°Έμ‘° κ°λ₯νλ€
--> λ³μ νΈμ΄μ€ν μ΄ λ°μνλ μμΈμ΄λ€.
β ν¨μ νΈμ΄μ€ν β
ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μκ° νκ°λλ©΄ ν¨μ
μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό BindingObjectλ₯Ό ν΅ν΄ μ μκ°μ²΄μ ν€λ‘ λ±λ‘λκ³ μμ±λ ν¨μ κ°μ²΄κ° μ¦μ ν λΉλλ€.
--> ν¨μ νΈμ΄μ€ν μ΄ λ°μνλ μμΈμ΄λ€.
β λ³μ νΈμ΄μ€ν κ³Ό ν¨μ νΈμ΄μ€ν μ μ°¨μ΄β
--> λ³μ νΈμ΄μ€ν
κ³Ό ν¨μ νΈμ΄μ€ν
μ μ°¨μ΄κ° μλ€λ©΄, λ³μλ μ μΈ -> μ΄κΈ°ν -> ν λΉ 3λ¨κ³λ₯Ό κ±°μ³ μμ±λκ³
ν¨μλ μ μΈ -> ν λΉ 2λ¨κ³λ§ κ±°μ³ μμ±λκΈ° λλ¬Έμ, λ³μλ undefinedλ‘ μ°Έμ‘°νκ² λμ§λ§
ν¨μλ μ°Έμ‘°νμ λ λ°λ‘ νΈμΆν μ μλ€λ μ μ΄λ€.
* μ μΈμ νκ²½ λ μ½λλ κ°μ²΄ νκ²½ λ μ½λκ° κ΄λ¦¬νμ§ μλ μμ΄λ€, letκ³Ό const ν€μλλ‘ μ μΈν μ μλ³μλ₯Ό κ΄λ¦¬νλ€.
letκ³Ό const ν€μλλ‘ μ μΈν λ³μλ varκ³Ό λ€λ₯΄κ² μ μ κ°μ²΄μ νλ‘νΌν°κ° λμ§ μλλ€.
κ·Έλμ window.yμ κ°μ΄ μ μ κ°μ²΄ νλ‘νΌν°λ‘μ μ°Έμ‘°ν μ μλ€.
λν μμ λ§νλ―, μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§νλκΈ° λλ¬Έμ
μ½λ μ€ν λ¨κ³μμ λ³μ μ μΈλ¬Έμ λλ¬νκΈ° μ κΉμ§ μ΄ μμ΄λ€μ μΌμμ μ¬κ°μ§λμ λΉ μ§κ² λλ€.
μΌμμ μ¬κ°μ§λ Temporal Dead Zone
letκ³Ό const ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ λ³ν¨μ΄ μλ€.
varκ³Ό λ§μ°¬κ°μ§λ‘ (μ½λ μ€ν μ΄μ μ) μ μ λ μ컬 νκ²½μ λ±λ‘λμ΄ μλ κ²μ κ°κΈ° λλ¬Έμ΄λ€.
λ€λ§ μ½λλ₯Ό μ€νν λ λ³μ μ μΈλ¬Έμ λλ¬ν΄μΌλ§ κ°μ μ°Έμ‘°ν μ μκΈ°μ μ΄μ κΉμ§λ μ°Έμ‘°νμ§ λͺ»νλ€λ μ μ΄ λ€λ₯΄λ€.
(varλ λ³μ μ μΈλ¬Έ λλ¬μν΄λ κΈ°λ₯ undefined μ°Έμ‘° κ°λ₯)
this λ°μΈλ©
μ μ νκ²½ λ μ½λμ [ [ Global ThisValue ] ] λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ©λλ€.
μΌλ°μ μΌλ‘ μ μ μ½λμμ thisλ ν΄λΉ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€κΈ°λλ¬Έμ μ μ κ°μ²΄κ° λ°μΈλ©λμλ€κ³ 보면 λλ€.
μ μ μ½λμμ thisλ₯Ό μ°Έμ‘°νλ©΄, μ μ νκ²½ λ μ½λμ [ [ Global ThisValue ] ] λ΄λΆ μ¬λ‘―μ λ°μΈλ©λμ΄ μλ κ°μ²΄κ° λ°νλλ€.
this λ°μΈλ©μ μ μ νκ²½ λ μ½λμλ§ μ‘΄μ¬νλ€. κ°μ²΄ νκ²½ λ μ½λμ μ μΈμ νκ²½ λ μ½λμλ this λ°μΈλ©μ΄ μλ° !!
μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€.
(μμ μ€μ½ν === νμ¬ νκ°μ€μΈ μμ€μ½λλ₯Ό ν¬ν¨νκ³ μλ μΈλΆ μ€μ½ν 1κ²Ή)
μ΄λ₯Ό ν΅ν΄ μ€μ½ν 체μΈμ ꡬννλ€. (μ€μ½ν 체μΈμ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈμ γ γ )
μ μ μ½λλ₯Ό ν¬ν¨νλ μμ€μ½λλ μμΌλ―λ‘, μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μλ null κ°μ΄ ν λΉλλ€.
μ΄λ μ μ λ μ컬 νκ²½μ΄ μ€μ½ν 체μΈμ μ’ μ μ μ‘΄μ¬ν¨μ μλ―Ένλ€.
βΎ μ½λ μ€ν
μ΄μ μ μμ½λκ° μμ°¨μ μΌλ‘ μ€νλλ©΄μ μ μ λ³μμ κ°μ΄ ν λΉλλ€.
μ½λκ° μ€νμ΄λμΌλ§ λ³μμ κ° ν λΉ λ¨κ³κ° μ€νλλ€ !!
λ³μ ν λΉλ¬Έμ΄λ ν¨μ νΈμΆλ¬Έμ μ€ννκΈ° μν΄μλ ν΄λΉ λ³μ/ν¨μ μ΄λ¦μ΄ μ μΈλ μλ³μμΈμ§ νμΈνλ κ³Όμ μ΄ νμνλ€.
μλ³μκ° μ μΈμ΄ λμλ€νλλΌλ μ€μ½νκ° λ€λ₯΄λ©΄ μλ³μλΌλ¦¬ κ°μ μ΄λ¦μ κ°μ§ μλ μκΈ° λλ¬Έμ΄λ€.
μ΄λ€ μλ³μλ₯Ό μ°Έμ‘°ν΄μΌνλ μ§ κ²°μ νλ κ³Όμ μ μλ³μ κ²°μ identifier resolution μ΄λΌκ³ νλ€.
μλ³μ κ²°μ μ μν΄ μ€ν μ€μΈ μ€ν 컨ν μ€νΈλΆν° μλ³μλ₯Ό κ²μν΄λκ°λλ°, λμ¬ λκΉμ§ !! μ€μ½νλ₯Ό ν컀νμ© λ²κ²¨κ°λ©° κ²μ¬νλ€.
μ λ¬Όλ‘ μ§κΈμ μ μ μ½λμ΄λ―λ‘, μ μ κ°μ²΄ μμ λ³μ μλ³μκ° μμΌλ©΄ μ°Έμ‘° μλ¬ReferenceErrorλ₯Ό λ°μμν¨λ€.
---------------------------------------------------------------------------- ν¨μμ½λ νκ°λΆν°μ€νκΉμ§
βΎ μ½λ νκ°
μ μμμ ν¨μκ° νΈμΆλλ©΄, μ μ μ½λμ μ€νμ μΌμ μ€λ¨νλ€.
(μ½λμ μ μ΄κΆμ μ΄μ ν΄λΉ ν¨μκ° μ₯κ³ μλ€.)
μ μΌ λ¨Όμ ν¨μ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ€.
μμ±λ ν¨μ μ€ν 컨ν μ€νΈλ, ν¨μ λ μ컬 νκ²½μ΄ μμ±λ λ€μμ !! μ€ν 컨ν μ€νΈ μ€νμ push λλ€.
ν¨μ λ μ컬 νκ²½μ μμ±νκ³ , ν¨μ μ€ν 컨ν μ€νΈμ λ°μΈλ©νλ€.
λ μ컬 νκ²½μ νκ²½ λ μ½λμ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ‘ κ΅¬μ±λλ€.
ν¨μ νκ²½ λ μ½λλ λ§€κ° λ³μ, arguments κ°μ²΄, ν¨μ λ΄λΆμμ μ μΈν μ§μ λ³μμ μ€μ²© ν¨μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ€.
ν¨μ νκ²½ λ μ½λμ [ [ ThisValue ] ] λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ©λλ€.
[ [ ThisValue ] ] λ΄λΆ μ¬λ‘―μ λ°μΈλ© λ κ°μ²΄λ μ μ κ°μ²΄ (window)λ₯Ό κ°λ¦¬ν¨λ€.
μ΄ μμ μμ νΈμΆλ ν¨μλ μΌλ° ν¨μμ΄κΈ° λλ¬Έμ΄λ€.
( β» thisλ ν¨μκ° μ΄λ€ ννλ‘ νΈμΆλλ μ§μ λ°λΌ λ°μΈλ©λλ κ°μ΄ λ¬λΌμ§λ€ )
κ·Έλμ μ΄ ν¨μ λ΄λΆμμ thisλ₯Ό μ°Έμ‘°νλ©΄,
ν¨μ νκ²½ λ μ½λμ [ [ ThisValue ] ] λ΄λΆ μ¬λ‘―μ λ°μΈλ©λμ΄ μλ this κ°μ²΄κ° λ°νλλ€.
μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μλ,
ν¨μ μ μκ° νκ°λ μμ μμ μ€ν μ€μΈ 컨ν μ€νΈμ λ μ컬 νκ²½μ μ°Έμ‘°κ° ν λΉλλ€.
μ΄ μμμμ ν¨μκ° νκ°λκ³ μλ μμ μμ μ€νλκ³ μλ 컨ν μ€νΈλ μ μ 컨ν μ€νΈμ΄λ―λ‘, μ μ λ μ컬 νκ²½μ μ°Έμ‘°κ° ν λΉλλ€.
ν λΉλ λ μ컬 νκ²½μ, ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [ [ Environment ] ] μ μ μ₯λ ν¨μμ μμ μ€μ½νμ΄λ€.
( μλ°μ€ν¬λ¦½νΈ μμ§μ μ μ -> νκ° -> κ°μ²΄ μμ± κ³Όμ μ ν΅ν΄ ν¨μλ₯Ό μ½λλ€.
μ΄λ [ [ Environment ] ] λ΄λΆ μ¬λ‘―μ ν¨μκ° μμ±λ λμ μμ μ€μ½νλ₯Ό μΊ‘μ²(μ μ₯)νλ€.
μΊ‘μ³λ³Έμ΄λκΉ ν΄λΉ ν¨μμ μμ μ€μ½νκ° ν λΉλ λ μ컬 νκ²½μ΄λΌκ³ λ³Ό μ μλ€. )
β ν΄λ‘μ β ( feat. ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [ [ Environment ] ], λ μ컬 μ€μ½ν )
ν¨μκ° μ€νλκΈ° μ , μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ νκ° λ¨κ³λ₯Ό λ¨Όμ κ±°μΉλ€.
μ΄ λ ν΄λΉ ν¨μμ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ΄ μμ±λλλ°,
μ΄ λ μ컬 νκ²½μ ν¨μμ νκ²½ λ μ½λ (μ¦, λ΄λΆ λ³μλ ν¨μ λ±), this, μΈλΆ λ μ컬 νκ²½μ΄ λ°μΈλ© λμ΄μλ€.
( μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ ν¨μ κ°μ²΄κ° μμ±λ λ
[ [ Environment ] ] λΌλ λ΄λΆ μ¬λ‘―μ ν¨μμ μμ μ€μ½νλ₯Ό μ μ₯ν΄λλ€. )
μΈλΆ λ μ컬 νκ²½μ ν΄λΉ ν¨μμ μμ μ€μ½νκ° ν¬ν¨λ μ°Έμ‘°κ°μ μλ―Ένλ€.
λ μ컬 νκ²½ κ°μ μ€μ½ν 체μ΄λ λλΆμ ν΄λΉ ν¨μλ₯Ό μ΄λμ νΈμΆν΄λ
μ μλ μμ μ μμ μ€μ½νλ₯Ό μ°Έμ‘°ν μ μκ² λλ€.
βΎ μ½λ μ€ν
λ°νμ ~!
ν¨μ μ½λκ° μμ°¨μ μΌλ‘ μ€νλμ΄ λ§€κ°λ³μμ μΈμκ° ν λΉλκ³ , λ³μ ν λΉλ¬Έμ΄ μ€νλμ΄ μ§μ λ³μ x, yμ κ°μ΄ ν λΉλλ€.
κ·Έλ¦¬κ³ λ€μ ν¨μ(λ΄λΆ ν¨μ)κ° νΈμΆλλ€.
π etc. bar ν¨μ μ½λ μ€ν
μ μ μ€ν 컨ν μ€νΈμ foo ν¨μ μ€ν 컨ν μ€νΈλ μμλ₯Ό ν΅ν΄ μ΄ν΄λ΄€λλ°,
μ무리 ν¨μ 컨ν
μ€νΈκ° μμ±λκ³ μ€νλλ κ³Όμ μ΄ κ°λλΌλ
bar ν¨μ μ€ν 컨ν
μ€νΈκ° μμΈλλ κ² κ°μ κ²°κ³Όλ₯Ό μμ±ν΄λ³΄μλ€.
보μλκ° λμ κ΄κΈ°λ₯Ό .... μλ°μ€ν¬λ¦½νΈμ μ§μ¬μ
νμ κ·Έλ¦Όλ€μ μ κ° λ€ λ§λ€μμ΄λΉ μ κ·Έλ₯ κ·Έλ λ€κ³ μ©
'Front-end > JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ°μ€ν¬λ¦½νΈ μ½λ°± ν¨μμ λΉλκΈ° μ²λ¦¬ Call back func & Asynchronous (0) | 2021.09.20 |
---|---|
μλ°μ€ν¬λ¦½νΈ λΉλκΈ° νλ‘κ·Έλλ° Asynchronous Programming (0) | 2021.09.06 |
μλ°μ€ν¬λ¦½νΈ λ DOM μ‘°μ μ°μ΅ (1) | 2021.08.31 |
μλ°μ€ν¬λ¦½νΈ ν΄λμ€ Class μ λ¬Έ (0) | 2021.08.29 |
μλ°μ€ν¬λ¦½νΈ ν΄λ‘μ νμ© Closure private λ³μ, λ©μλ νλ΄ λ΄κΈ° (0) | 2021.08.28 |
λκΈ