[Javascript] Execution context
23 μ€ν 컨ν
μ€νΈ Execution context
Ref: Modern JS Deep Dive: 23μ₯ μ€ν 컨ν μ€νΈ
- μ€ν 컨ν μ€νΈλ₯Ό λ°λ₯΄κ² μ΄ν΄νλ©΄ μ€μ½ν κΈ°λ°μΌλ‘ μλ³μμ μλ³μμ λ°μΈλ©λ κ°μ κ΄λ¦¬νλ λ°©μκ³Ό νΈμ΄μ€ν μ΄ λ°μνλ μ΄μ , ν΄λ‘μ μ λμ λ°©μ, κ·Έλ¦¬κ³ νμ€ν¬ νμ ν¨κ» λμνλ μ΄λ²€νΈ νΈλ€λ¬μ λΉλκΈ° μ²λ¦¬μ λμ λ°©μμ μ΄ν΄ν μ μλ€.
23.1 μμ€μ½λμ νμ
- ECMAScript μ¬μμ μμ€μ½λλ₯Ό 4κ°μ§ νμ
μΌλ‘ ꡬλΆνλ€. 4κ°μ§ νμ
μ μμ€μ½λλ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νλ€.
- μ μ μ½λ - μ μ μ€ν 컨ν μ€νΈ
- ν¨μ μ½λ - ν¨μ μ€ν 컨ν μ€νΈ
- eval μ½λ - eval μ€ν 컨ν μ€νΈ
- λͺ¨λ μ½λ - λͺ¨λ μ€ν 컨ν μ€νΈ
23.2 μμ€μ½λμ νκ°μ μ€ν
- μλ°μ€ν¬λ¦½νΈ μμ§μ μμ€μ½λλ₯Ό 2κ°μ κ³Όμ , μ¦ νκ°μ μ€νμΌλ‘ λλμ΄ μ²λ¦¬νλ€.
- νκ° κ³Όμ μμ μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ λ³μ, ν¨μ λ±μ μ μΈλ¬Έλ§ λ¨Όμ μ€ννμ¬ μμ±λ λ³μλ ν¨μ μλ³μλ₯Ό ν€λ‘ μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½ν(λ μ컬 νκ²½μ νκ²½ λ μ½λ)μ λ±λ‘νλ€.
- μ€ν(λ°νμ)λκΈ° μμνλ©΄ μ€νμ νμν μ 보, μ¦ λ³μλ ν¨μμ μ°Έμ‘°λ₯Ό μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμμ κ²μν΄μ μ·¨λνλ€. κ·Έλ¦¬κ³ λ³μ κ°μ λ³κ²½ λ± μμ€μ½λμ μ€ν κ²°κ³Όλ λ€μ μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμ λ±λ‘λλ€.
23.3 μ€ν 컨ν μ€νΈμ μν
- μ€ν 컨ν μ€νΈλ μμ€μ½λλ₯Ό μ€ννλ λ° νμν νκ²½μ μ 곡νκ³ μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμμ΄λ€.
- μλ³μ(λ³μ, ν¨μ, ν΄λμ€ λ±μ μ΄λ¦)λ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½νμ μ½λ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ΄λΆ λ©μ»€λμ¦μΌλ‘, λͺ¨λ μ½λλ μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μ€νλκ³ κ΄λ¦¬λλ€.
- μλ³μμ μ€μ½νλ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μΌλ‘ κ΄λ¦¬νκ³ μ½λ μ€ν μμλ μ€ν 컨ν μ€νΈ μ€νμΌλ‘ κ΄λ¦¬νλ€.
23.4 μ€ν 컨ν μ€νΈ μ€ν
- λ€μ μμ λ₯Ό μ΄ν΄λ³΄μ.
const x = 1;
function foo() {
const y = 2;
function bar() {
const z = 3;
console.log( x + y + z );
}
bar();
}
foo(); // 6
- μ μμ λ μμ€μ½λμ νμ μΌλ‘ λΆλ₯ν λ μ μ μ½λμ ν¨μ μ½λλ‘ μ΄λ£¨μ΄μ Έ μλ€.
- μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨Όμ μ μ μ½λλ₯Ό νκ°νμ¬ μ μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νλ€. κ·Έλ¦¬κ³ ν¨μκ° νΈμΆλλ©΄ ν¨μ μ½λλ₯Ό νκ°νμ¬ ν¨μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νλ€.
- μ μ μ½λμ νκ° - { μ€ν 컨ν μ€νΈ μ€νμ νΈμ( x, foo() λ±λ‘) }, μ μ μ½λ μ€ν - { x κ° ν λΉ, μ μν¨μ foo() νΈμΆ }
- foo ν¨μ μ½λμ νκ° - { μ€ν 컨ν μ€νΈ μ€νμ νΈμ( y, bar() λ±λ‘ ) }, foo ν¨μ μ½λμ μ€ν - { y κ° ν λΉ, μ€μ²©ν¨μ bar() νΈμΆ }
- bar ν¨μ μ½λμ νκ° - { μ€ν 컨ν μ€νΈ μ€νμ νΈμ( z λ±λ‘ ) }, bar ν¨μ μ½λμ μ€ν - { z κ° ν λΉ, console.log λ©μλ νΈμΆ }
- foo ν¨μ μ½λλ‘ λ³΅κ· - bar ν¨μλ₯Ό μ€ν 컨ν μ€νΈ μ€νμμ popνμ¬ μ κ±°, μ’ λ£
- μ μ μ½λλ‘ λ³΅κ· - foo ν¨μλ₯Ό μ€ν 컨ν μ€νΈ μ€νμμ popνμ¬ μ κ±°, μ’ λ£
- μ΄μ²λΌ 컨ν
μ€νΈ μ€νμ μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬νλ€. μμ€μ½λκ° νκ°λλ©΄ μ€ν 컨ν
μ€νΈκ° μμ±λκ³ μ€ν 컨ν
μ€νΈ μ€νμ μ΅μμμ μμΈλ€. μ€ν 컨ν
μ€νΈ μ€νμ μ΅μμμ μ‘΄μ¬νλ μ€ν 컨ν
μ€νΈλ μΈμ λ νμ¬ μ€ν μ€μΈ μ½λμ μ€ν 컨ν
μ€νΈμ΄λ©° βμ€ν μ€μΈ μ€ν 컨ν
μ€νΈ
running execution context
βλΌ λΆλ₯Έλ€.
23.5 λ μ컬 νκ²½lexical environment
- λ μ컬 νκ²½μ μλ³μμ μλ³μμ λ°μΈλ©λ κ°, κ·Έλ¦¬κ³ μμ μ€μ½νμ λν μ°Έμ‘°λ₯Ό κΈ°λ‘νλ μλ£κ΅¬μ‘°λ‘ μ€ν 컨ν μ€νΈλ₯Ό ꡬμ±νλ μ»΄ν¬λνΈλ€.
- λ μ컬 νκ²½μ ν€μ κ°μ κ°λ κ°μ²΄ ννμ μ€μ½ν(μ μ, ν¨μ, λΈλ‘ μ€μ½ν)λ₯Ό μμ±νμ¬ μλ³μλ₯Ό ν€λ‘ λ±λ‘νκ³ μλ³μμ λ°μΈλ©λ κ°μ κ΄λ¦¬νλ€. μ¦, λ μ컬 νκ²½μ μ€μ½νλ₯Ό ꡬλΆνμ¬ μλ³μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ μ₯μ μν μ νλ λ μ컬 μ€μ½νμ μ€μ²΄λ€.
- λ μ컬 νκ²½μ λκ°μ μ»΄ν¬λνΈλ‘ ꡬμ±λλ€.
- νκ²½ λ μ½λ
Environment Record
- νκ²½ λ μ½λ
- μ€μ½νμ ν¬ν¨λ μλ³μλ₯Ό λ±λ‘νκ³ λ±λ‘λ μλ³μμ λ°μΈλ©λ κ°μ κ΄λ¦¬νλ μ μ₯μλ€. νκ²½ λ μ½λλ μμ€μ½λμ νμ
μ λ°λΌ κ΄λ¦¬νλ λ΄μ©μ μ°¨μ΄κ° μλ€.
- μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°
Outer Lexical Environment Reference
- μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°
- μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€. ν΄λΉ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν μμ€μ½λλ₯Ό ν¬ν¨νλ μμ μ½λμ λ μ컬 νκ²½μ λ§νλ€. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ₯Ό ν΅ν΄ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈμΈ μ€μ½ν 체μΈμ ꡬννλ€.
23.6 μ€ν 컨ν μ€νΈμ μμ±κ³Ό μλ³μ κ²μ κ³Όμ
- λ€μ μμ λ₯Ό ν΅ν΄ μ΄λ»κ² μ€ν 컨ν μ€νΈκ° μμ±λκ³ μ½λ μ€ν κ²°κ³Όκ° κ΄λ¦¬λλμ§, κ·Έλ¦¬κ³ μ΄λ»κ² μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μλ³μλ₯Ό κ²μνλμ§ μ΄ν΄λ³΄μ.
var x = 1;
const y = 2;
function foo(a) {
var x = 3;
const y = 4;
function bar(b) {
const z = 5;
console.log( a + b + x + y + z );
}
bar(10);
}
foo(20); // 42
23.6.1 μ μ κ°μ²΄ μμ±
- μ μ κ°μ²΄λ μ μ μ½λκ° νκ°λκΈ° μ΄μ μ μμ±λλ€. μ΄λ μ μ κ°μ²΄μλ λΉνΈμΈ μ μ νλ‘νΌν°μ λΉνΈμΈ μ μ ν¨μ. κ·Έλ¦¬κ³ νμ€ λΉνΈμΈ κ°μ²΄κ° μΆκ°λλ©° λμ νκ²½ λλ νΉμ νκ²½μ μν νΈμ€νΈ κ°μ²΄λ₯Ό ν¬ν¨νλ€.
- μ μ κ°μ²΄λ Object.prototypeμ μμλ°λλ€. μ¦, μ μ κ°μ²΄λ νλ‘ν νμ 체μΈμ μΌμμ΄λ€.
23.6.2 μ μ μ½λ νκ°
- μμ€μ½λκ° λ‘λλλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ μ μ½λλ₯Ό νκ°νλ€. μ μ μ½λ νκ°λ λ€μκ³Ό κ°μ μμλ‘ μ§νλλ€.
- μ μ μ€ν 컨ν μ€νΈ μμ±
- μ μ λ μ컬 νκ²½ μμ±
2.1. μ μ νκ²½ λ μ½λ μμ±
2.1.1. κ°μ²΄ νκ²½ λ μ½λ μμ±
2.1.2. μ μΈμ νκ²½ λ μ½λ μμ±
2.2. this λ°μΈλ©
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
1. μ μ μ€ν 컨ν μ€νΈ μμ±
- μ μ μ€ν 컨ν
μ€νΈλ₯Ό μμμμ¬ μ€ν 컨ν
μ€νΈ μ€νμ νΈμνλ€. μ μ μ€ν 컨ν
μ€νΈλ
running execution context
κ° λλ€.
2. μ μ λ μ컬 νκ²½ μμ±
- μ μ λ μ컬 νκ²½
Global Lexical Environment
μ μμ±νκ³ μ μ μ€ν 컨ν μ€νΈμ λ°μΈλ©νλ€. - λ μ컬 νκ²½μ 2κ°μ μ»΄ν¬λνΈ, μ¦ νκ²½ λ μ½λ
Environment Record
μ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°OuterLexicalEnvironmentReference
λ‘ κ΅¬μ±λλ€.
2.1. μ μ νκ²½ λ μ½λ μμ±
- μ μ νκ²½ λ μ½λ
Global Environment Record
λ μ μ λ³μλ₯Ό κ΄λ¦¬νλ μ μ μ€μ½ν, μ μ κ°μ²΄μ λΉνΈμΈ μ μ νλ‘νΌν°μ λΉνΈμΈ μ μ ν¨μ, νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό μ 곡νλ€. - κΈ°μ‘΄ var ν€μλλ‘ μ μΈν μ μ λ³μμ ES6μ let, const ν€μλλ‘ μ μΈν μ μ λ³μλ₯Ό ꡬλΆνμ¬ κ΄λ¦¬νκΈ° μν΄ μ μ μ€μ½ν μν μ νλ μ μ νκ²½ λ μ½λλ κ°μ²΄ νκ²½ λ μ½λ
Object Environment Record
μ μ μΈμ νκ²½ λ μ½λDeclarative Environment Record
λ‘ κ΅¬μ±λμ΄ μλ€. - κ°μ²΄ νκ²½ λ μ½λλ κΈ°μ‘΄μ μ μ κ°μ²΄κ° κ΄λ¦¬νλ var ν€μλλ‘ μ μΈν μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν μ μ ν¨μ, λΉνΈμΈ μ μ νλ‘νΌν°μ λΉνΈμΈ μ μ ν¨μ, νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό κ΄λ¦¬νκ³ , μ μΈμ νκ²½ λ μ½λλ let, const ν€μλλ‘ μ μΈν μ μ λ³μλ₯Ό κ΄λ¦¬νλ€.
- μ¦, κ°μ²΄ νκ²½ λ μ½λμ μ μΈμ νκ²½ λ μ½λλ μλ‘ νλ ₯νμ¬ μ μ μ€μ½νμ μ μ κ°μ²΄(μ μ λ³μμ μ μ κ°μ²΄ νλ‘νΌν°ν)λ₯Ό κ΄λ¦¬νλ€.
2.1.1. κ°μ²΄ νκ²½ λ μ½λ μμ±
- κ°μ²΄ νκ²½ λ μ½λλ
BindingObject
λΌκ³ λΆλ₯΄λ κ°μ²΄μ μ°κ²°λλ€.BindingObject
λ μ μ κ°μ²΄ μμ±μ μμ±λ μ μ κ°μ²΄λ€. - μ μ μ½λ νκ° κ³Όμ μμ var ν€μλλ‘ μ μΈν μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ μ μ ν¨μλ μ μ νκ²½ λ μ½λμ κ°μ²΄ νκ²½ λ μ½λμ μ°κ²°λ
BindingObject
λ₯Ό ν΅ν΄ μ μ κ°μ²΄μ νλ‘νΌν°μ λ©μλκ° λλ€. κ·Έλ¦¬κ³ μ΄λ λ±λ‘λ μλ³μλ₯Ό μ μ νκ²½ λ μ½λμ κ°μ²΄ νκ²½ λ μ½λμμ κ²μνλ©΄ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό κ²μνμ¬ λ°ννλ€. - μ΄κ²μ΄ var ν€μλλ‘ μ μΈλ μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ μ μ ν¨μκ° μ μ κ°μ²΄μ νλ‘νΌν°μ λ©μλκ° λκ³ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ(window) μμ΄ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ λ©μ»€λμ¦μ΄λ€.
2.1.2. μ μΈμ νκ²½ λ μ½λ μμ±
- let, const ν€μλλ‘ μ μΈν μ μ λ³μ(ν¨μ ννμ ν¬ν¨)λ μ μΈμ νκ²½ λ μ½λμ λ±λ‘λκ³ κ΄λ¦¬λλ€.
- const ν€μλλ‘ μ μΈν λ³μλ βμ μΈ λ¨κ³βμ βμ΄κΈ°ν λ¨κ³βκ° λΆλ¦¬λμ΄ μ§ννλ€. λ°λΌμ λ°νμμ μ€ν νλ¦μ΄ λ³μ μ μΈλ¬Έμ λλ¬νκΈ° μ κΉμ§ μΌμμ μ¬κ°μ§λ
Temporal Dead Zone: TDZ
μ λΉ μ§κ² λλ€. - let, const ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ λ³ν¨μ΄ μλ€. λ¨, let, const ν€μλλ‘ μ μΈν λ³μλ λ°νμμ 컨νΈλ‘€μ΄ λ³μ μ μΈλ¬Έμ λλ¬νκΈ° μ κΉμ§ μΌμμ μ¬κ°μ§λμ λΉ μ§κΈ° λλ¬Έμ μ°Έμ‘°ν μ μλ€.
2.2. this λ°μΈλ©
- μ μ νκ²½ λ μ½λμ [[GlobalThisValue]] λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ©λλ€. μΌλ°μ μΌλ‘ μ μ μ½λμμ thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ―λ‘ μ μ νκ²½ λ μ½λμ [[GlobalThisValue]] λ΄λΆ μ¬λ‘―μλ μ μ κ°μ²΄κ° λ°μΈλ©λλ€.
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
- νμ¬ νκ° μ€μΈ μμ€μ½λλ₯Ό ν¬ν¨νλ μΈλΆ μμ€μ½λμ λ μ컬 νκ²½, μ¦ μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€. μ΄λ₯Ό ν΅ν΄ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈμΈ μ€μ½ν 체μΈμ ꡬννλ€. νμ¬ νκ° μ€μΈ μμ€μ½λλ μ μ μ½λμ΄λ―λ‘ nullμ΄ ν λΉλλ€. μ΄λ μ μ λ μ컬 νκ²½μ΄ μ€μ½ν 체μΈμ μ’ μ μ μ‘΄μ¬ν¨μ μλ―Ένλ€.
23.6.3 μ μ μ½λ μ€ν
- λ³μ ν λΉλ¬Έμ΄ μ€νλμ΄ μ μ λ³μ x, yμ κ°μ΄ ν λΉλλ€. κ·Έλ¦¬κ³ foo ν¨μκ° νΈμΆλλ€.
- μ μΈλμ§ μμ μλ³μλ μ°Έμ‘°ν μ μμΌλ―λ‘ λ³μ λλ ν¨μ μ΄λ¦μ΄ μ μΈλ μλ³μμΈμ§ νμΈν΄μΌ νλ€.
- μλ³μλ μ€μ½νκ° λ€λ₯΄λ©΄ κ°μ μ΄λ¦μ κ°μ§ μ μλ€. λ°λΌμ μ΄λ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°νλ©΄ λλμ§ κ²°μ ν νμκ° μλ€. μ΄λ₯Ό μλ³μ κ²°μ
identifier resolution
μ΄λΌ νλ€. - μλ³μλ₯Ό κ²μν λμλ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμμ μλ³μλ₯Ό κ²μνκΈ° μμνλ€. μ μΈλ μλ³μλ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ νκ²½ λ μ½λμ λ±λ‘λμ΄ μλ€.
- λ§μ½ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μμ μλ³μλ₯Ό κ²μν μ μμΌλ©΄ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°κ° κ°λ¦¬ν€λ νκ²½, μ¦ μμ μ€μ½νλ‘ μ΄λνμ¬ μλ³μλ₯Ό κ²μνλ€.
- μ΄κ²μ΄ λ°λ‘ μ€μ½ν 체μΈμ λμ μ리λ€. μ μ λ μ컬 νκ²½μ μ€μ½ν 체μΈμ μ’
μ μ΄λ―λ‘ μ°Έμ‘° μλ¬
ReferenceError
λ₯Ό λ°μμν¨λ€. - μ΄μ²λΌ μ€ν 컨ν μ€νΈλ μμ€μ½λλ₯Ό μ€ννκΈ° μν΄ νμν νκ²½μ μ 곡νκ³ μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμμ΄λ€.
23.6.4 foo ν¨μ μ½λ νκ°
- foo ν¨μκ° νΈμΆλλ©΄ μ μ μ½λμ μ€νμ μΌμ μ€λ¨νκ³ foo ν¨μ λ΄λΆλ‘ μ½λμ μ μ΄κΆμ΄ μ΄λνλ€. κ·Έλ¦¬κ³ ν¨μ μ½λλ₯Ό νκ°νκΈ° μμνλ€. ν¨μ μ½λ νκ°λ μλ μμλ‘ μ§νλλ€.
- ν¨μ μ€ν 컨ν μ€νΈ μμ±
- ν¨μ λ μ컬 νκ²½ μμ±
2.1. ν¨μ νκ²½ λ μ½λ μμ±
2.2. this λ°μΈλ©
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
- μΈλΆμ μΈ μμ± κ³Όμ μ μμλλ‘ μ΄ν΄λ³΄μ
1. ν¨μ μ€ν 컨ν μ€νΈ μμ±
- λ¨Όμ foo ν¨μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νκ³ ν¨μ λ μ컬 νκ²½μ΄ μμ±λ λ€μ μ€ν 컨ν
μ€νΈ μ€νμ νΈμλλ€. foo ν¨μ μ€ν 컨ν
μ€νΈλ
running execution context
κ° λλ€.2. ν¨μ λ μ컬 νκ²½ μμ±
- foo ν¨μ λ μ컬 νκ²½
Function Lexical Environment
μ μμ±νκ³ foo ν¨μ μ€ν 컨ν μ€νΈμ λ°μΈλ©νλ€.2.1. ν¨μ νκ²½ λ μ½λ μμ±
- ν¨μ λ μ컬 νκ²½μ ꡬμ±νλ μ»΄ν¬λνΈ μ€ νλμΈ ν¨μ νκ²½ λ μ½λ
Function Environment Record
λ 맀κ°λ³μ, arguments κ°μ²΄, νμ λ΄λΆμμ μ μΈν μ§μ λ³μμ μ€μ²© ν¨μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ€.2.2. this λ°μΈλ©
- ν¨μ νκ²½ λ μ½λμ [[ThisValue]] λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ©λλ€. λ°μΈλ©λ κ°μ²΄λ ν¨μ νΈμΆ λ°©μμ λ°λΌ κ²°μ λλ€.
- foo ν¨μλ μΌλ° ν¨μλ‘ νΈμΆλμμΌλ―λ‘ thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€. λ°λΌμ [[ThisValue]] λ΄λΆ μ¬λ‘―μλ μ μ κ°μ²΄κ° λ°μΈλ©λλ€.
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
- μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μ foo ν¨μ μ μκ° νκ°λ μμ μ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ μ°Έμ‘°κ° ν λΉλλ€.
- foo ν¨μλ μ μ μ½λμ μ μλ μ μ ν¨μμ΄λ―λ‘ foo ν¨μ μ μλ μ μ μ½λ νκ° μμ μ νκ°λλ€. μ΄ μμ μ μ€ν μ€μΈ μ€ν 컨ν μ€νΈλ μ μ μ€ν 컨ν μ€νΈλ€. λ°λΌμ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μλ μ μ λ μ컬 νκ²½μ μ°Έμ‘°κ° ν λΉλλ€.
- μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μλ₯Ό νκ°νμ¬ ν¨μ κ°μ²΄λ₯Ό μμ±ν λ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½, μ¦ ν¨μμ μμ μ€μ½νλ₯Ό ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]μ μ μ₯νλ€. ν¨μ λ μ컬 νκ²½μ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μ ν λΉλλ κ²μ λ°λ‘ ν¨μμ μμ μ€μ½νλ₯Ό κ°λ¦¬ν€λ ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]μ μ μ₯λ λ μ컬 νκ²½μ μ°Έμ‘°λ€. μ¦, ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]κ° λ°λ‘ λ μ컬 μ€μ½νλ₯Ό ꡬννλ λ©μ»€λμ¦μ΄λ€.
- ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]μ λ μ컬 μ€μ½νλ ν΄λ‘μ λ₯Ό μ΄ν΄ν μ μλ μ€μν λ¨μλ€.
23.6.5 foo ν¨μ μ½λ μ€ν
- λ°νμμ΄ μμλμ΄ foo ν¨μμ μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€νλκΈ° μμνλ€. 맀κ°λ³μμ μΈμκ° ν λΉλκ³ , λ³μ ν λΉλ¬Έμ΄ μ€νλμ΄ μ§μ λ³μ x, yμ κ°μ΄ ν λΉλλ€. κ·Έλ¦¬κ³ ν¨μ barκ° νΈμΆλλ€.
- μ΄λ μλ³μ κ²°μ μ μν΄ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μμ μλ³μλ₯Ό κ²μνκΈ° μμνλ€. λͺ¨λ μλ³μλ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μμ λͺ¨λ κ²μν μ μλ€. κ²μλ μλ³μμ κ°μ λ°μΈλ©νλ€.
23.6.6 bar ν¨μ μ½λ νκ°
- bar ν¨μ λ΄λΆλ‘ μ½λμ μ μ΄κΆμ΄ μ΄λνλ€. κ·Έλ¦¬κ³ bar ν¨μ μ½λλ₯Ό νκ°νκΈ° μμνλ€. μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ μμ± κ³Όμ μ foo ν¨μ μ½λ νκ°μ λμΌνλ€.
23.6.7 bar ν¨μ μ½λ μ€ν
- λ°νμμ΄ μμλμ΄ bar ν¨μμ μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€νλκΈ° μμνλ€. 맀κ°λ³μμ μΈμκ° ν λΉλκ³ , λ³μ ν λΉλ¬Έμ΄ μ€νλμ΄ μ§μ λ³μ zμ κ°μ΄ ν λΉλλ€. 그리κ³
console.log( a + b + x + y + z);
κ° μ€νλλ€. μ΄ μ½λλ λ€μ μμλ‘ μ€νλλ€.- console μλ³μ κ²μ
- console μλ³μλ₯Ό μ€μ½ν 체μΈμμ κ²μνλ€. bar ν¨μ λ μ컬 νκ²½μμ κ²μ -> foo ν¨μ λ μ컬 νκ²½μμ κ²μ -> μ μ λ μ컬 νκ²½μμ κ²μ -> μ μ λ μ컬 νκ²½μ κ°μ²΄ νκ²½ λ μ½λμ BindingObjectλ₯Ό ν΅ν΄ μ μ κ°μ²΄μμ μ°Ύμ μ μμ. 2. log λ©μλ κ²μ
- console κ°μ²΄μμ log λ©μλλ₯Ό κ²μνλ€. μ΄λ console κ°μ²΄μ νλ‘ν νμ 체μΈμ ν΅ν΄ λ©μλλ₯Ό κ²μνλ€. log λ©μλλ μμλ νλ‘νΌν°κ° μλλΌ console κ°μ²΄κ° μ§μ μμ νλ νλ‘νΌν°λ€.
console.hasownProperty('log'); // true
- ννμ a + b + x + y + zμ νκ°
- a, b, x, y, z μλ³μλ₯Ό κ²μνλ€. a - foo ν¨μ λ μ컬 νκ²½, b - bar ν¨μ λ μ컬 νκ²½, x,y - foo ν¨μ ν₯μ컬 νκ²½, z - bar ν¨μ λ μ컬 νκ²½μμ κ²μλλ€.
- console.log λ©μλ νΈμΆ
- ννμ a + b + x + y + z μ΄ νκ°λμ΄ μμ±ν κ°μ console.log λ©μλμ μ λ¬νμ¬ νΈμΆνλ€.
23.6.8 bar ν¨μ μ½λ μ€ν μ’ λ£
- console.log λ©μλκ° νΈμΆλκ³ μ’ λ£νλ©΄ λλ μ€νν μ½λκ° μμΌλ―λ‘ bar ν¨μ μ½λμ μ€νμ΄ μ’ λ£λλ€. μ΄λ μ€ν 컨ν μ€νΈ μ€νμμ bar ν¨μ μ€ν 컨ν μ€νΈκ° νλμ΄ μ κ±°λκ³ foo μ€ν 컨ν μ€νΈκ° μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° λλ€.
- μ€ν 컨ν μ€νΈ μ€νμμ bar ν¨μ μ€ν 컨ν μ€νΈκ° μ κ±°λμλ€κ³ ν΄μ bar ν¨μ λ μ컬 νκ²½κΉμ§ μ¦μ μλ©Ένλ κ²μ μλλ€. λ μ컬 νκ²½μ μ€ν 컨ν μ€νΈμ μν΄ μ°Έμ‘°λκΈ°λ νμ§λ§ λ 립μ μΈ κ°μ²΄λ€. κ°μ²΄λ₯Ό ν¬ν¨ν λͺ¨λ κ°μ λκ΅°κ°μ μν΄ μ°Έμ‘°λμ§ μμ λ λΉλ‘μ κ°λΉμ§ 컬λ ν°μ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ νλ³΄κ° ν΄μ λμ΄ μλ©Ένλ€.
23.6.9 foo ν¨μ μ½λ μ€ν μ’ λ£
- bar ν¨μκ° μ’ λ£νλ©΄ λ μ΄μ μ€νν μ½λκ° μμΌλ―λ‘ foo ν¨μ μ½λμ μ€νμ΄ μ’ λ£λλ€. μ΄λ μ€ν 컨ν μ€νΈ μ€νμμ foo ν¨μ μ€ν 컨ν μ€νΈκ° νλμ΄ μ κ±°λκ³ μ μ μ€ν 컨ν μ€νΈκ° μ€ν μ€μΈ 컨ν μ€νΈκ° λλ€.
23.6.10 μ μ μ½λ μ€ν μ’ λ£
- foo ν¨μκ° μ’ λ£λλ©΄ λλ μ€νν μ½λκ° μμΌλ―λ‘ μ μ μ½λμ μ€νμ΄ μ’ λ£λκ³ μ μ μ€ν 컨ν μ€νΈλ μ€ν 컨ν μ€νΈ μ€νμμ νλμ΄ μ€ν 컨ν μ€νΈ μ€νμλ μ무κ²λ λ¨μμμ§ μκ² λλ€.
23.7 μ€ν 컨ν μ€νΈμ λΈλ‘ λ 벨 μ€μ½ν
- λ€μ μμ λ₯Ό μ΄ν΄λ³΄μ.
let x = 1;
if(true){
let x = 10;
console.log(x); // 10
}
console.log(}x); // 1
- let ν€μλλ‘ λ³μκ° μ μΈλ if λ¬Έμ μ½λ λΈλ‘μ΄ μ€νλλ©΄ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μμ±ν΄μΌ νλ€. μ΄λ₯Ό μν΄ μ μΈμ νκ²½ λ μ½λλ₯Ό κ°λ λ μ컬 νκ²½μ μλ‘κ² μμ±νμ¬ κΈ°μ‘΄μ μ μ λ μ컬 νκ²½μ κ΅μ²΄νλ€. μ΄λ ifλ¬Έμ μ½λ λΈλ‘μ μν λ μ컬 νκ²½μ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ if λ¬Έμ΄ μ€νλκΈ° μ΄μ μ μ μ λ μ컬 νκ²½μ κ°λ¦¬ν¨λ€.
- ifλ¬Έ μ½λ λΈλ‘μ μ€ν΄μ΄ μ’ λ£λλ©΄ μ€νλκΈ° μ΄μ μ λ μ컬 νκ²½μΌλ‘ λλλ¦°λ€.
- μ΄λ ifλ¬ΈλΏ μλλΌ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μμ±νλ λͺ¨λ λΈλ‘λ¬Έμ μ μ©λλ€.
- forλ¬Έμ λ³μ μ μΈλ¬Έμ let ν€μλλ₯Ό μ¬μ©νλ©΄ μ½λ λΈλ‘μ΄ λ°λ³΅ν΄μ μ€νλ λλ§λ€ μ½λ λΈλ‘μ μν μλ‘μ΄ λ μ컬 νκ²½μ μμ±νλ€. λ§μ½ forλ¬Έμ μ½λ λΈλ‘ λ΄μμ μ μλ ν¨μκ° μλ€λ©΄ μ΄ ν¨μμ μμ μ€μ½νλ for λ¬Έμ μ½λ λΈλ‘μ΄ μμ±ν λ μ컬 νκ²½μ΄λ€.
- μ΄λ ν¨μμ μμ μ€μ½νλ for λ¬Έμ μ½λ λΈλ‘μ΄ λ°λ³΅ν΄μ μ€νλ λλ§λ€ μλ³μ(forλ¬Έμ λ³μ μ μΈλ¬Έ λ° forλ¬Έμ μ½λ λΈλ‘ λ΄μμ μ μΈλ μ§μ λ³μ λ±)μ κ°μ μ μ§ν΄μΌ νλ€. μ΄λ₯Ό μν΄ forλ¬Έμ μ½λ λΈλ‘μ΄ λ°λ³΅ν΄μ μ€νλ λλ§λ€ λ 립μ μΈ λ μ컬 νκ²½μ μμ±νμ¬ μλ³μμ κ°μ μ μ§νλ€.