1. Scopeλ?
π°οΈ μλ°μ€ν¬λ¦½νΈ ν¨μκ° μ€νλλ κ³Όμ
μλ°μ€ν¬λ¦½νΈμμ ν¨μκ° μ€νλλ κ³Όμ μ κ°λ΅νκ² μ€λͺ νμλ©΄, 'ν¨μκ° μ€νλ λ κ° μ€μ½νμ ν΄λΉνλ μ€ν 컨ν μ€νΈκ° μ½μ€νμ μμΈλ€' λΌκ³ ννν μ μλ€.
μ΄ λ¬Έμ₯μ μ΄ν΄νκΈ° μν΄ μμμΌ ν κ°λ μ΄ μ€μ½ν(Scope)μ μ€ν 컨ν μ€νΈ(Execute Context)μΈλ° μ°μ μ€μ½νμ λν΄ μ 리ν΄λ³΄μ.
πͺ Scope
μ€μ½νλ λ¨μ΄μ λ» κ·Έλλ‘ 'λ²μ'λΌλ μλ―Έλ₯Ό κ°μ§κ³ μλ€. μ½λμμμ μ€μ½νλ 'λ³μμ μ κ·Όν μ μλ λ²μ'λΌκ³ 보면 λλ€.
μλ°μ€ν¬λ¦½νΈμ μ€μ½νλ ν¬κ² μ μ μ€μ½ν(Global Scope)μ μ§μ μ€μ½ν(Local Scope)λ‘ λλ μ μλ€.
μ μ μ€μ½ν(Global Scope): μλ°μ€ν¬λ¦½νΈ μ½λμ μ΅μμ λ 벨μ ν΄λΉνλ μ€μ½νλ‘ ν¨μ μ΄λμμλ μ κ·Όμ΄ κ°λ₯νλ€.
μ§μ μ€μ½ν(Local Scope) :νΉμ ν¨μμ ν΄λΉνλ μ€μ½νλ‘ ν΄λΉ ν¨μ μμ κ³Ό νμ ν¨μμμλ§ μμμ μ κ·Όμ΄ κ°λ₯νλ€.
λΈλ‘ μ€μ½ν:{}
λ‘ λ¬ΆμΈ λΈλ‘ λ΄μμ μ μΈλ λ³μλ ν΄λΉ λΈλ‘ μμμλ§ μ κ·Ό κ°λ₯ (μ:let
,const
)
λ μ컬 μ€μ½ν: λ³μμ λ²μλ μ½λ μμ± μ(μ μ ) κ²°μ λλ©°, νΈμΆ μμΉκ° μλ μ μΈ μμΉμ λ°λΌ μ€μ½νλ₯Ό κ²°μ
μ¬κΈ°μ μ½λμ μ΅μμ λ 벨, μ¦ μ μμμ λ³μλ₯Ό μ μΈνλ©΄ κ·Έ λ³μλ μ μ λ³μμ΄λ―λ‘ global scopeμ μνλ κ±°λΌκ³ μκ°μ΄ λ€μ§λ§ νκ°μ§ μ μν΄μΌ ν μ μ΄ μλ€.
1. μ μμ€μ½ν
μ μ μ€μ½ν = μ§ μ 체, μ§ μ΄λμμλ 물건μ μ¬μ©ν μ μλ μν
μ) μ§ μμ 곡μ©μΌλ‘ λλ μκ³κ° μλ€κ³ κ°μ νμ. κ°μ‘± λꡬλ λͺ¨λ λ°©μμ μ΄ μκ³λ₯Ό μ¬μ©ν μ μλ€.
let clock = "Wall Clock"; // μ μ λ³μ
function livingRoom() {
console.log(clock); // "Wall Clock"
}
function kitchen() {
console.log(clock); // "Wall Clock"
}
livingRoom();
kitchen();
2. ν¨μ μ€μ½ν (Function Scope)
ν¨μ μ€μ½ν = λ°© μμλ§ λ³΄μ΄λ 물건
λ°©(ν¨μ) μμμλ§ μ¬μ© κ°λ₯νκ³ , λ€λ₯Έ λ°©μμλ 보μ΄μ§ μλλ€κ³ μκ°νλ©΄ λ¨.
μ) κ±°μ€μ μλ μνλ κ±°μ€μμλ§ λ³΄μ΄κ³ μ¬μ©ν μ μλ€. λ€λ₯Έ λ°©μμλ 보μ΄μ§ μμ.
function livingRoom() {
let sofa = "Sofa";
console.log(sofa); // "Sofa"
}
livingRoom();
console.log(sofa); // Error: sofa is not defined
3. λΈλ‘ μ€μ½ν (Block Scope)
λΈλ‘ μ€μ½ν = μλ μμ λ£μ΄λ 물건
μλ(λΈλ‘ {}) μμμλ§ λ³΄μ΄κ³ , λ°μμλ λ³Ό μ μλ€.
μ) κ±°μ€μ μλμ μ¨κ²¨ λ 리λͺ¨μ»¨μ μλμ μ΄μμ λλ§ μ¬μ©ν μ μλ€.
if (true) {
let remote = "Remote Control";
console.log(remote); // "Remote Control"
}
console.log(remote); // Error: remote is not defined
4. λ μ컬 μ€μ½ν (Lexical Scope)
λ μ컬 μ€μ½νλ λ°©μμ μ°Ύμ μ μμΌλ©΄ μ§ μ 체λ₯Ό λ€μ§λ κ²κ³Ό κ°λ€.
μμͺ½μμ μ μΈλμ§ μμ λ³μλ₯Ό μ°ΎμΌλ©΄, λ°κΉ₯(μμ μ€μ½ν)μμμ°Ύλλ€.
μ) κ±°μ€μμ 물건μ λͺ» μ°ΎμΌλ©΄ μ£Όλ°©, νκ΄ λ± μ§ μ 체λ₯Ό μ°Ύμλ³Έλ€.
let light = "Ceiling Light";
function livingRoom() {
console.log(light); // "Ceiling Light"
}
livingRoom();
5. μ€μ²© μ€μ½ν
λ°© μμ μλμ΄ μλ κ²½μ°, μλ μ 물건μ λ°© μμμλ 보μ΄μ§λ§, μ§ μ 체μμλ 보μ΄μ§ μλλ€.
μ) λ°© μμ μλ λ ΈνΈμ μλ μ ν.
function livingRoom() {
let note = "Notebook";
if (true) {
let pen = "Pen";
console.log(note); // "Notebook" (μμ μ€μ½νμμ κ°μ Έμ΄)
console.log(pen); // "Pen"
}
console.log(pen); // Error: pen is not defined
}
livingRoom();
μ μ μ€μ½ν: μ§ μ 체μμ μ¬μ© κ°λ₯.
ν¨μ μ€μ½ν: νΉμ λ°©μμλ§ μ¬μ© κ°λ₯.
λΈλ‘ μ€μ½ν: νΉμ μλμμλ§ μ¬μ© κ°λ₯.
λ μ컬 μ€μ½ν: μμͺ½μμ λͺ» μ°ΎμΌλ©΄ λ°κΉ₯μΌλ‘ λκ°λ©° μ°Ύμ.