JavaScript Programming

JavaScript - μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ λ ‰μ‹œμ»¬ ν™˜κ²½

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 12. 19.

좜처: λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ”₯λ‹€μ΄λΈŒ κ·Έλ¦Ό 23–5 μ‹€ν–‰μ»¨ν…μŠ€νŠΈ μŠ€νƒ

 

ν˜Έμ΄μŠ€νŒ…, ν΄λ‘œμ €, this 바인딩 등을 μ•Œλ €λ©΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ•Œμ•„μ•Ό ν•œλ‹€. 

 

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ (Execution Context)

μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ 싀행될 λ•Œ μƒμ„±λ˜λŠ” μ‹€ν–‰ μ •λ³΄μ˜ ν™˜κ²½μ΄λ‹€. μ–΄λ–€ μ½”λ“œκ°€ 싀행될지, λ³€μˆ˜μ™€ ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ 싀행될지λ₯Ό κ΄€λ¦¬ν•œλ‹€.

 

κ΅¬μ„±μš”μ†Œ

1. λ ‰μ‹œμ»¬ ν™˜κ²½ (Lexical Environment)

  • λ³€μˆ˜λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λ©°, μŠ€μ½”ν”„ 체인을 κ΄€λ¦¬ν•œλ‹€.
  • ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œ 블둝(ν•¨μˆ˜, μ „μ—­, 블둝)의 μŠ€μ½”ν”„λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

2. λ³€μˆ˜ ν™˜κ²½ (Variable Environment)

  • λ ‰μ‹œμ»¬ ν™˜κ²½κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ§Œ κ΄€λ¦¬ν•œλ‹€.
  • ν•¨μˆ˜ μ‹€ν–‰ μ‹œ 초기 μƒνƒœλ₯Ό λ³΄κ΄€ν•œλ‹€.

3. this 바인딩 (This Binding)

  • ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ—μ„œμ˜ this 값을 가리킨닀.

λ ‰μ‹œμ»¬ ν™˜κ²½ (Lexical Environment)

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ λ‚΄λΆ€μ˜ ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜λ‘œ, λ³€μˆ˜μ™€ ν•¨μˆ˜ 선언을 κΈ°λ‘ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.

ν˜„μž¬ μ½”λ“œ λΈ”λ‘μ—μ„œ μ‚¬μš©ν•  μŠ€μ½”ν”„μ™€ μ‹λ°œμž(λ³€μˆ˜, ν•¨μˆ˜)λ₯Ό μ €μž₯ν•œλ‹€.

즉 λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ 역할을 ν•˜λŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ˜ 싀체이닀.

κ΅¬μ„±μš”μ†Œ

1. ν™˜κ²½ λ ˆμ½”λ“œ (Environment Record)

ν˜„μž¬ μŠ€μ½”ν”„ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ 정보λ₯Ό μ €μž₯ν•˜λŠ” 객체이닀.

 

2. μ™ΈλΆ€ ν™˜κ²½ μ°Έμ‘° (Outer Environment Reference)

μƒμœ„ μŠ€μ½”ν”„μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό μ €μž₯ν•˜μ—¬, μŠ€μ½”ν”„ 체인을 κ΅¬ν˜„ν•œλ‹€.


예제 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
function outer() {
  let x = 10;
 
  function inner() {
    let y = 20;
    console.log(x + y);
  }
 
  inner();
}
outer();
 
cs

 

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

outer ν•¨μˆ˜ ν˜ΈμΆœμ‹œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성. → λ ‰μ‹œμ»¬ ν™˜κ²½μ— x μ €μž₯.

inner ν•¨μˆ˜ 호좜 μ‹œ μƒˆλ‘œμš΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성. →  λ ‰μ‹œμ»¬ ν™˜κ²½μ— y μ €μž₯, μ™ΈλΆ€ ν™˜κ²½ 참쑰둜 outer의 λ ‰μ‹œμ»¬ ν™˜κ²½ μ°Έμ‘°.

 

λ ‰μ‹œμ»¬ ν™˜κ²½

outer의 λ ‰μ‹œμ»¬ ν™˜κ²½ -  x와 outer μŠ€μ½”ν”„ μ°Έμ‘°.

inner의 λ ‰μ‹œμ»¬ ν™˜κ²½ -  y와 inner μŠ€μ½”ν”„ μ°Έμ‘°.

μš”μ•½ 차이점

νŠΉμ§• μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ λ ‰μ‹œμ»¬ ν™˜κ²½
μ—­ν•  μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ 정보λ₯Ό 관리 μŠ€μ½”ν”„μ™€ λ³€μˆ˜ 관리λ₯Ό μœ„ν•œ μ €μž₯μ†Œ
μœ„μΉ˜ λŸ°νƒ€μž„μ— μƒμ„±λ˜μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ‹€ν–‰ 과정을 μ œμ–΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ λ‚΄λΆ€μ˜ ꡬ성 μš”μ†Œ
포함 λ‚΄μš© λ ‰μ‹œμ»¬ ν™˜κ²½, λ³€μˆ˜ ν™˜κ²½, this 바인딩 ν™˜κ²½ λ ˆμ½”λ“œμ™€ μ™ΈλΆ€ ν™˜κ²½ μ°Έμ‘°
예제 포함 μ—¬λΆ€ this와 var의 초기 μƒνƒœ 포함 let, const, ν•¨μˆ˜ μ„ μ–Έ λ“± ν˜„μž¬ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ μ‹λ³„μž
생성 μ‹œμ  ν•¨μˆ˜ 호좜, μ „μ—­ μ½”λ“œ μ‹€ν–‰, eval μ‹€ν–‰ μ‹œ ν•¨μˆ˜ 호좜, 블둝 μ‹€ν–‰ λ“± μŠ€μ½”ν”„κ°€ 생성될 λ•Œ

 

λŒ“κΈ€