/
πŸ“™

JS Scope

JavaScript
Table of contents

μŠ€μ½”ν”„(Scope, 유효 λ²”μœ„; 적용 λ²”μœ„)

μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•˜κ³ , μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ‹λ³„μžλ₯Ό 검색할 λ•Œ μ‚¬μš©ν•˜λŠ” κ·œμΉ™μ΄λΌκ³ λ„ ν•  수 μžˆλ‹€.

λͺ¨λ“  μ‹λ³„μžλŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„κ°€ κ²°μ •λœλ‹€.

μ „μ—­ μŠ€μ½”ν”„μ™€ 지역 μŠ€μ½”ν”„

λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— λ”°λΌμ„œ μžμ‹ μ΄ μœ νš¨ν•œ λ²”μœ„(μŠ€μ½”ν”„)κ°€ κ²°μ •λœλ‹€.

μ „μ—­ μŠ€μ½”ν”„(Global Scope)

μ½”λ“œμ˜ κ°€μž₯ λ°”κΉ₯ μ˜μ—­, μ—¬κΈ°μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“  μ°Έμ‘° κ°€λŠ₯ν•œ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€.

지역 μŠ€μ½”ν”„(Local Scope)

ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€ λ˜λŠ” μ½”λ“œ λΈ”λŸ­, μ—¬κΈ°μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 유효 λ²”μœ„κ°€ ν•œμ •λ˜μ–΄ μžˆλŠ” 지역 λ³€μˆ˜κ°€ λœλ‹€.
지역 λ³€μˆ˜λŠ” μžμ‹ μ˜ 지역 μŠ€μ½”ν”„μ™€ ν•˜μœ„ 지역 μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•˜λ‹€.

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

ν•¨μˆ˜κ°€ 쀑첩이 되면, 지역 μŠ€μ½”ν”„λ„ 쀑첩이 λ˜λ©΄μ„œ ν•˜λ‚˜μ˜ 계측적 ꡬ쑰둜 μ—°κ²°λœλ‹€. μ΄λ ‡κ²Œ μŠ€μ½”ν”„κ°€ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λœ 것을 μŠ€μ½”ν”„ 체인이라 ν•˜κ³ , μŠ€μ½”ν”„ 체인의 μ΅œμƒμœ„μ— μžˆλŠ” μŠ€μ½”ν”„κ°€ μ „μ—­ μŠ€μ½”ν”„μ΄λ‹€.

μ‹λ³„μž 검색

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„ 체인을 톡해 μ‹λ³„μžλ₯Ό μ°ΎλŠ”λ‹€.
μ‹œμž‘ν•˜λŠ” μŠ€μ½”ν”„μ—μ„œ λΆ€ν„° μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•œλ‹€.

ν•˜μœ„μ—μ„œ μƒμœ„λ‘œ 일방 톡행

ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μƒμœ„ μŠ€μ½”ν”„λ‘œ μ΄λ™ν•˜λ©° μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜λŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ μƒμœ„ μŠ€μ½”ν”„μ—μ„œ ν•˜μœ„ μŠ€μ½”ν”„μ˜ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

μŠ€μ½”ν”„ 체인에 μ˜ν•œ λ³€μˆ˜ 검색

λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  λ•Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„ 체인을 톡해 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œμ˜ μŠ€μ½”ν”„μ—μ„œ μ‹œμž‘ν•˜μ—¬ μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ„ μ–Έλœ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•œλ‹€.

μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λŠ” ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ 자유둭게 μ°Έμ‘°ν•  수 μžˆμ§€λ§Œ ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λ₯Ό μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

μŠ€μ½”ν”„μ˜ λ²”μœ„

Function-level scope

ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ©° ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€.
즉, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 지역 λ³€μˆ˜μ΄λ©° ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ‘ μ „μ—­ λ³€μˆ˜μ΄λ‹€.

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.

Block-level scope

μ½”λ“œ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ©° μ½”λ“œ 블둝 μ™ΈλΆ€μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

let const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•œλ‹€.

μŠ€μ½”ν”„μ˜ λ²”μœ„

Function-level scope

ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ©° ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€.
즉, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 지역 λ³€μˆ˜μ΄λ©° ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ‘ μ „μ—­ λ³€μˆ˜μ΄λ‹€.

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.

Block-level scope

μ½”λ“œ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ©° μ½”λ“œ 블둝 μ™ΈλΆ€μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

let const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•œλ‹€.

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„(Lexical Scope)

ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν–ˆλŠ”μ§€κ°€ μ•„λ‹ˆλΌ ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ μ •μ˜ν–ˆλŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€.

ν•¨μˆ˜ μ •μ˜κ°€ ν‰κ°€λ˜λŠ” μ‹œμ μ— μžμ‹ μ΄ μ •μ˜λœ μŠ€μ½”ν”„λ₯Ό μƒμœ„ μŠ€μ½”ν”„λ‘œ κ²°μ •ν•˜κ³  κΈ°μ–΅ν•˜κ³ , ν•¨μˆ˜κ°€ 호좜되면 κΈ°μ–΅ν•˜κ³  μžˆλŠ” μžμ‹ μ΄ μ •μ˜λœ μŠ€μ½”ν”„λ₯Ό μƒμœ„ μŠ€μ½”ν”„λ‘œ μ‚¬μš©ν•œλ‹€.

μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ’€ λ³€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 정적 μŠ€μ½”ν”„(Static Scope)라 λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.

logo
Things I've Learned