λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“’ JavaScript

[JS Tam9μƒν™œ] #9 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

by Tamii 2021. 8. 25.
λ°˜μ‘ν˜•

πŸ“’23 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

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

기본적으둜 μ†ŒμŠ€μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œλ‹€.
μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ‹€ν–‰κ²°κ³Όλ₯Ό κ΄€λ¦¬ν•˜λŠ” μ˜μ—­
μŠ€μ½”ν”„μ™€ μ½”λ“œ μ‹€ν–‰ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•˜λŠ” λ§€μ»€λ‹ˆμ¦˜μœΌλ‘œ λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹€ν–‰λ˜κ³  κ΄€λ¦¬λœλ‹€.

관리 λŒ€μƒ 관리 주체
μŠ€μ½”ν”„ μ‹€ν–‰μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½
μ‹€ν–‰μˆœμ„œ μ‹€ν–‰μ»¨ν…μŠ€νŠΈμ˜ μŠ€νƒ

μ†ŒμŠ€μ½”λ“œ 평가: μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성 ν›„ μŠ€μ½”ν”„ 등둝
μ†ŒμŠ€μ½”λ“œ μ‹€ν–‰: λŸ°νƒ€μž„ μ‹œμž‘- (μ„ μ–Έλ¬Έμ œμ™Έ)μ†ŒμŠ€μ½”λ“œ 순차 μ‹€ν–‰ λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ μ°Έμ‘°λ₯Ό μ‹€ν–‰μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„μ—μ„œ 검색해 취득

μ†ŒμŠ€μ½”λ“œ νƒ€μž… μ„€λͺ…
μ „μ—­μ½”λ“œ var λ³€μˆ˜, ν•¨μˆ˜μ„ μ–Έλ¬Έ
ν•¨μˆ˜μ½”λ“œ 지역 μŠ€μ½”ν”„ 생성, μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, arguments 객체 관리
evalμ½”λ“œ strict mode에 λ…μžμ μΈ μŠ€μ½”ν”„ 생성
λͺ¨λ“ˆμ½”λ“œ λͺ¨λ“ˆλ³„λ‘œ 독립적인 μŠ€μ½”ν”„ 생성

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

  1. μ „μ—­μ½”λ“œ 평가 μ‹€ν–‰
    μ „μ—­λ³€μˆ˜μ™€ ν•¨μˆ˜ μ„ μ–Έλ¬Έ μ „μ—­μŠ€μ½”ν”„μ— 등둝 -> μ „μ—­λ³€μˆ˜ κ°’ ν• λ‹Ή, ν•¨μˆ˜ 호좜
  2. ν•¨μˆ˜ μ½”λ“œ 평가
    λ§€κ°œλ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜ μ§€μ—­μŠ€μ½”ν”„μ— 등둝 -> this바인딩
  3. ν•¨μˆ˜μ½”λ“œ μ‹€ν–‰(λŸ°νƒ€μž„)
    λ§€κ°œλ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ— κ°’ ν• λ‹Ή

μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•΄μ„  μŠ€μ½”ν”„λ₯Ό ꡬ뢄해 λ°”μΈλ­λœ 값이 κ΄€λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€.

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

λ ‰μ‹œμ»¬ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ: μŠ€μ½”ν”„μ™€ μ‹λ³„μžκ΄€λ¦¬

μ‹€ν–‰μ»¨ν…μŠ€νŠΈ : LexicalEnvironment , VariableEnvironment
λ ‰μ‹œμ»¬ ν™˜κ²½ : ν™˜κ²½μ½”λ“œ(EnvironmentRecord) , μ™ΈλΆ€λ ‰μ‹œμ»¬ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°(OuterLexicalEnvironmentReference)


λ ‰μ‹œμ»¬μŠ€μ½”ν”„

μƒμœ„μŠ€μ½”ν”„λŠ” ν•¨μˆ˜κ°€ 어디에 μ •μ˜λ˜μ—ˆλŠ”μ§€μ— 따라 κ²°μ •λœλ‹€ (μ–΄λ””μ„œ 호좜 X)

μŠ€μ½”ν”„μ²΄μΈ

μƒμœ„ μŠ€μ½”ν”„μ˜ μ°Έμ‘°(μ™ΈλΆ€ λ ‰μ‹œμ»¬ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°)λ₯Ό 톡해 μƒμœ„ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Ό μ—°κ²°λ˜λŠ”κ²ƒ

μ‹€ν–‰μ»¨ν…μŠ€νŠΈμ˜ 생성과 μ‹λ³„μž 검색 κ³Όμ •

  1. 전역객체생성
  2. 전역객체 평가
    μ „μ—­μ‹€ν–‰μ»¨ν…μŠ€νŠΈ 생성
    μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성
    μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성
    this 바인딩
    μ™ΈλΆ€ λ ‰μ‹œμ»¬ μ°Έμ‘° κ²°μ •
  • μ „μ—­ν™˜κ²½λ ˆμ½”λ“œ: var κ³Ό let``constκ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ 쑴재 (κ°μ²΄ν™˜κ²½λ ˆμ½”λ“œ, 선언적 ν™˜κ²½λ ˆμ½”λ“œ) -> μ „μ—­μŠ€μ½”ν”„ & 전역객체 관리

μ΄λ•Œ var둜 μ„ μ–Έν•œλ³€μˆ˜ & ν•¨μˆ˜μ„ μ–Έλ¬ΈμœΌλ‘œ ν˜ΈμΆœν•œ ν•¨μˆ˜κ°μ²΄λŠ” μ„ μ–Έ 이전에 호좜될 수 μžˆλ‹€.
let,constλ‘œμ„ μ–Έν•œλ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λ˜λŠ”κ±΄ λ³€ν•¨μ—†μ§€λ§Œ, λŸ°νƒ€μž„ 쀑 λ³€μˆ˜ 선언문에 λ„λ‹¬ν•˜κΈ° μ „κΉŒμ§€ μΌμ‹œμ μœΌλ‘œ ν˜ΈμΆœμ‹œ μ°Έμ‘°μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

πŸ†€ μ‹€ν–‰μ»¨ν…μŠ€νŠΈλŠ” 무엇이죠?[β“μ§ˆλ¬Έ]

μŠ€μ½”ν”„μ™€ μ½”λ“œ μ‹€ν–‰ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•˜λŠ” κ²ƒμœΌλ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ ν™˜κ²½μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

πŸ†€ μŠ€μ½”ν”„κ°€ 뭐죠?[β“μ§ˆλ¬Έ]

μ‹€ν–‰μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ μ‹λ³„μžλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

πŸ†€ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ 뭐죠?

μŠ€μ½”ν”„μ™€ μ‹λ³„μžλ₯Ό κ΄€λ¦¬λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ μ™ΈλΆ€ λ ‰μ‹œμ»¬ 관경에 λŒ€ν•œ μ°Έμ‘°λ₯Ό 톡해 μŠ€μ½”ν”„ 체인이 μΌμ–΄λ‚˜κ²Œ ν•©λ‹ˆλ‹€.
λ ‰μ‹œμ»¬ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ
json : μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ μ—­ν• 

πŸ†€ μŠ€μ½”ν”„μ²΄μΈμ€ λ¬΄μ—‡μΈκ°€μš”?[β“μ§ˆλ¬Έ]

μ‹λ³„μž 결정을 μœ„ν•΄ 싀행쀑인 μ‹€ν–‰μ»¨ν…μŠ€νŠΈμ—μ„œ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜κ³  없을 μ‹œ μƒμœ„ μŠ€μ½”ν”„λ‘œ μ΄λ™ν•΄μ„œ 쒅점인 μ „μ—­ λ ‰μ‹œμ»¬ν™˜κ²½κΉŒμ§€ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜λŠ” 루트λ₯Ό λ§ν•©λ‹ˆλ‹€.

πŸ†€ alert 도 사싀 μ „μ—­κ°μ²΄μ˜ ν”„λ‘œνΌν‹°μΈλ° μ–΄λ–»κ²Œ windowν‚€μ›Œλ“œ 없이 μ‚¬μš©ν•  수 μžˆλ‚˜μš”?[β“μ§ˆλ¬Έ]

μ „μ—­ μ½”λ“œλ₯Ό ν‰κ°€ν•˜λŠ” 과정에 μ „μ—­ν™˜κ²½λ ˆμ½”λ“œμ˜ BindingObjectλ₯Ό 톡해 μ „μ—­κ°μ²΄μ˜ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œκ°€ λ©λ‹ˆλ‹€.

λŒ“κΈ€