JS Scope
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)λΌ λΆλ₯΄κΈ°λ νλ€.