Skip to content

Latest commit

Β 

History

History
104 lines (70 loc) Β· 3.78 KB

File metadata and controls

104 lines (70 loc) Β· 3.78 KB

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

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(execution context)λž€?

μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œκ°€ 싀행될 λ•Œ μ œκ³΅ν•  ν™˜κ²½ 정보듀을 λͺ¨μ•„놓은 객체

μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλž€?

  1. μ „μ—­ κ³΅κ°„μ˜ μ½”λ“œ
  2. eval()
  3. ν•¨μˆ˜ 호좜

ν˜„μž¬ 싀행쀑인 μ½”λ“œμ™€ κ΄€λ ¨μ—†λŠ” μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄(예. μƒˆλ‘œμš΄ ν•¨μˆ˜ 호좜) μƒˆλ‘œμš΄ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ½œμŠ€νƒμ— μŒ“λŠ”λ‹€. μ‹€ν–‰μ€‘μ΄λ˜ μ½”λ“œκ°€ μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή μ»¨ν…μŠ€νŠΈκ°€ 제거되고, 졜 μƒμœ„μ— 올라온 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ κ΄€λ ¨λœ μ½”λ“œλ₯Ό λ§ˆμ € μ‹€ν–‰ν•œλ‹€. JSλŠ” μ½œμŠ€νƒμ„ μ΄μš©ν•˜μ—¬ 전체 μ½”λ“œμ˜ ν™˜κ²½κ³Ό μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€.

μ „μ—­ μ»¨ν…μŠ€νŠΈλŠ” μ½œμŠ€νƒμ˜ κ°€μž₯ ν•˜μœ„μ— μ‘΄μž¬ν•œλ‹€.λΈŒλΌμš°μ €κ°€ μžλ™μœΌλ‘œ μ‹€ν–‰ν•˜λ©°, 앱이 μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€.

μŠ€νƒ vs 큐

μŠ€νƒκ³Ό 큐

  • μŠ€νƒ: ν›„μž…μ„ μΆœ(LIFO: Last In First Out)
  • 큐: μ„ μž…μ„ μΆœ(FIFO: First In First Out)

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ°€μ§€λŠ” 정보

Variable Environment

  • μ‹λ³„μž + μ™ΈλΆ€ ν™˜κ²½ 정보
    • λ³€μˆ˜λͺ…
    • λ§€κ°œλ³€μˆ˜μ™€ 인수
    • ν•¨μˆ˜ μ„ μ–Έ(ν‘œν˜„μ‹ μ œμ™Έ)
  • μ„ μ–Έμ‹œμ μ˜ Lexical Environment의 μŠ€λƒ…μƒ·μœΌλ‘œ 변경을 λ°˜μ˜ν•˜μ§€ μ•ŠμŒ

객체 생성 μˆœμ„œ(key: value)

  1. λ§€κ°œλ³€μˆ˜: 인수
  2. ν•¨μˆ˜λͺ…: ν•¨μˆ˜
  3. λ³€μˆ˜λͺ…: undefined

μŠ€νƒκ³Ό 큐

ν•¨μˆ˜ 선언을 λ¨Όμ € μ²˜λ¦¬ν•œ 후에 λ³€μˆ˜ 선언을 μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, μ½”λ“œμƒ ν•¨μˆ˜ aκ°€ λ‚˜μ€‘μ— μ„ μ–Έλ˜μ—ˆμœΌλ‚˜ λ§ˆμ§€λ§‰ console.log(a)의 κ²°κ³ΌλŠ” ν•¨μˆ˜κ°€ μ•„λ‹Œ λ³€μˆ˜ a의 값이 λœλ‹€.

Lexical Environment

  • Variable Environmentλ₯Ό λ³΅μ‚¬ν•΄μ„œ 생성
  • 변경이 μ‹€μ‹œκ°„ 반영됨

environmentRecord

  • μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ „μ—­ 객체 μ‚¬μš©
  • μ‹λ³„μž 정보 μ €μž₯(λ³€μˆ˜λŠ” μ„ μ–Έλ§Œ μ €μž₯ν•˜κ³  할당은 μ €μž₯ν•˜μ§€ μ•ŠμŒ)
  • μˆœμ„œλŒ€λ‘œ μˆ˜μ§‘(μœ„μ˜ 객체 생성 μˆœμ„œ μ°Έμ‘°)
  • μˆ˜μ§‘μ„ 마친 μ‹œμ μ€ 아직 μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μ „
    • μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 μ‹λ³„μž 정보λ₯Ό μ €μž₯ν•΄ λ‘” 것이 ν˜Έμ΄μŠ€νŒ…μ˜ 정체!

outerEnvironmentReference

  • μ „μ—­ μ»¨ν…μŠ€νŠΈλŠ” 아무 값도 가지지 μ•ŠμŒ
  • ν•¨μˆ˜κ°€ 선언될 λ‹Ήμ‹œμ˜ Lexical Environment μ°Έμ‘°
  • μ—°κ²° 리슀트(linked list)
  • μŠ€μ½”ν”„: μ‹λ³„μžμ— λŒ€ν•œ μœ νš¨λ²”μœ„
    • ES5κΉŒμ§€λŠ” μ „λΆ€ ν•¨μˆ˜ μŠ€μ½”ν”„
    • let, const, class, 엄격 λͺ¨λ“œμ—μ„  블둝 μŠ€μ½”ν”„
  • μŠ€μ½”ν”„μ²΄μΈ: μŠ€μ½”ν”„λ₯Ό μ•ˆμ—μ„œ λ°–μœΌλ‘œ μ°¨λ‘€λ‘œ 객체의 ν”„λ‘œνΌν‹°κ°€ μ•„λ‹Œ(μ „μ—­ 객체 μ œμ™Έ) μ‹λ³„μžλ₯Ό 검색해 λ‚˜κ°€λŠ” 것
    • (비ꡐ) ν”„λ‘œν† νƒ€μž…μ²΄μΈ: 객체의 ν”„λ‘œνΌν‹°(λ©”μ†Œλ“œ 포함)λ₯Ό κ²€μƒ‰ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜

ν•¨μˆ˜ μ„ μ–Έλ¬Έ vs ν•¨μˆ˜ ν‘œν˜„μ‹

  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ: function a() {}

    • λ°˜λ“œμ‹œ κΈ°λͺ…ν•¨μˆ˜
  • ν•¨μˆ˜ ν‘œν˜„μ‹: var a = function() {}

    • ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ ν• λ‹Ή
    • 읡λͺ…ν•¨μˆ˜λ„ μ‚¬μš© κ°€λŠ₯(κ³Όκ±° λΈŒλΌμš°μ €λŠ” 읡λͺ…ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  경우 디버깅 μ‹œ ν•¨μˆ˜ 이름을 ν‘œμ‹œν•΄μ£Όμ§€ μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ μ§€κΈˆμ€ 잘 λ‚˜μ˜΄.)
    • ν˜Έμ΄μŠ€νŒ…μ€ μ„ μ–Έλ§Œ!
    var c = function d() {};
    
    c(); // ok
    d(); // error
  • ν˜Έμ΄μŠ€νŒ…μœΌλ‘œ μΈν•œ ν˜Όλž€μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€!

This Binding

  • this μ‹λ³„μž λŒ€μƒ 객체
  • μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό ν™œμ„±ν™”ν•˜λŠ” λ‹Ήμ‹œ μ§€μ •λœ this μ €μž₯
  • thisλŠ” ν•¨μˆ˜ 호좜 νŒ¨ν„΄μ— 따라 달라진닀

μ°Έκ³ 


[TOP] | [HOME]