λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Language/Javascript

[Javascript]μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μ™„λ²½ κ°€μ΄λ“œ: κ°œλ…λΆ€ν„° μ‹€μ „κΉŒμ§€!

by YJ Dev 2024. 7. 6.
728x90
λ°˜μ‘ν˜•
SMALL

μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ–΄λ–»κ²Œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  λ³€μˆ˜ 및 ν•¨μˆ˜μ˜ μŠ€μ½”ν”„λ₯Ό κ΄€λ¦¬ν•˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜λŠ” 데 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ κΈ°λ³Έ κ°œλ…λΆ€ν„° κ³ κΈ‰ μ£Όμ œκΉŒμ§€ λ‹¨κ³„λ³„λ‘œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ


01. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ κΈ°λ³Έ κ°œλ…πŸ’‘

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

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” νŠΉμ • μ½”λ“œκ°€ 싀행될 λ•Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 ν•΄λ‹Ή μ½”λ“œμ— λŒ€ν•΄ μƒμ„±ν•˜λŠ” ν™˜κ²½μž…λ‹ˆλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ 생성과정

μ½”λ“œκ°€ 싀행될 λ•Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜κ³ , μ΄λŠ” 호좜 μŠ€νƒ(Call Stack)에 μŒ“μž…λ‹ˆλ‹€.

호좜 μŠ€νƒ(Call Stack)과의 관계

호좜 μŠ€νƒμ€ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μŒ“μ΄λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. 호좜된 ν•¨μˆ˜λ“€μ΄ μˆœμ„œλŒ€λ‘œ μŠ€νƒμ— μŒ“μ΄κ³ , 싀행이 μ™„λ£Œλ˜λ©΄ μŠ€νƒμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.


02. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ ꡬ성 μš”μ†ŒπŸ”

λ³€μˆ˜ 객체(Variable Object)

λ³€μˆ˜ κ°μ²΄λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성될 λ•Œ ν•¨κ»˜ μƒμ„±λ˜λ©°, ν•¨μˆ˜ λ‚΄μ˜ λ³€μˆ˜ 및 ν•¨μˆ˜ 선언을 ν¬ν•¨ν•©λ‹ˆλ‹€.

μŠ€μ½”ν”„ 체인(Scope Chain)

μŠ€μ½”ν”„ 체인은 λ³€μˆ˜ 객체λ₯Ό 톡해 λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. μ΄λŠ” ν˜„μž¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ μƒμœ„ μ»¨ν…μŠ€νŠΈμ˜ λ³€μˆ˜ 객체λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

this 바인딩(this binding)

this 바인딩은 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성될 λ•Œ κ²°μ •λ©λ‹ˆλ‹€. μ΄λŠ” ν˜ΈμΆœν•œ 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.


μŠ€μ½”ν”„ 체인과 this에 κ΄€ν•œ λ‚΄μš©μ€ μ•„λž˜ ν¬μŠ€νŒ…μ„ μ°Έκ³ ν•΄ μ£Όμ„Έμš”πŸ˜

""

[Javascript]μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€μ½”ν”„ μ™„λ²½ κ°€μ΄λ“œ: κΈ°μ΄ˆλΆ€ν„° κ³ κΈ‰κΉŒμ§€

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€λ£¨λŠ” 데 μžˆμ–΄μ„œ 'μŠ€μ½”ν”„'λŠ” 맀우 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. μŠ€μ½”ν”„λ₯Ό μ΄ν•΄ν•˜λ©΄ μ½”λ“œμ˜ 가독성을 높이고, 버그λ₯Ό μ€„μ΄λŠ” 데 큰 도움이 λ©λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€μ½”ν”„μ—

creativevista.tistory.com

""

[Javascript]μžλ°”μŠ€ν¬λ¦½νŠΈ this μ™„λ²½ κ°€μ΄λ“œ: κ°œλ…λΆ€ν„° ν™œμš©κΉŒμ§€!

JavaScriptλ₯Ό λ°°μš°λ‹€ 보면 thisλΌλŠ” ν‚€μ›Œλ“œλ₯Ό 자주 μ ‘ν•˜κ²Œ λ©λ‹ˆλ‹€. thisλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” νŠΉλ³„ν•œ ν‚€μ›Œλ“œλ‘œ, ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ κ²°μ •λ˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. 이λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜μ§€

creativevista.tistory.com


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 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μŠ€μ½”ν”„ 체인 문제 ν•΄κ²°

μŠ€μ½”ν”„ μ²΄μΈμ—μ„œ λ³€μˆ˜ 검색이 μ–΄λ €μš΄ 경우, ν΄λ‘œμ €λ₯Ό ν™œμš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•