
π JavaScript μ€μ½ν μ²΄μΈ (Scope Chain)
μμ ν¬μ€ν μμ μ΄ν΄λ΄€λ―μ΄, λ³μμλ μ μ μ€μ½ν, μ§μ μ€μ½ν, λΈλ‘ μ€μ½νκ° μμλ€.
(μλ ν¬μ€ν μ°Έκ³ )
[리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScript μ€μ½ν(scope)
λͺ©μ°¨ (OPEN)π JavaScript μ€μ½ν (scope)π₯ μ μ μ€μ½ν (Golbal Scope)π§ μ§μ μ€μ½ν (Local Scope)π¨ λΈλ‘ μ€μ½ν (Block Scope)π© ν¨μ μμ ν¨μ (μ€μ²© ν¨μ μ€μ½ν)π κ²°λ‘ π JavaScript μ€μ½ν (scope)μ½λ©
sso-codingdiary.tistory.com
κ·Έλ λ€λ©΄ ν¨μ μμμ λ³μλ₯Ό μ°Ύμ λ
μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ»κ² λ³μλ₯Ό νμνλ κ²μΌκΉ?
μ΄ κ³Όμ μ μ€μ½ν μ²΄μΈ (scope chain)μ΄λΌκ³ λΆλ₯Έλ°,
μ€λμ μ΄ μ€μ½ν 체μΈμ λν΄μ μμΈν μμλ³΄κ³ μ νλ€.
π₯ μ€μ½ν 체μΈμ κΈ°λ³Έ μ리
μλ°μ€ν¬λ¦½νΈ μμ§μ λ³μλ₯Ό μ°Ύμ λ μλμ μμλ‘ νμμ νλ€.
- μμ μ μ€μ½ν (νμ¬ λΈλ‘ λλ νμ¬ ν¨μ) μμμ μ°ΎκΈ°
- 1λ²μμ μμλ€λ©΄ ν λ¨κ³ λ°κΉ₯ μ€μ½νλ‘ λκ°μ μ°ΎκΈ°
- κ·Έλλ μλ€λ©΄ λ ν λ¨κ³ λ°κΉ₯ μ€μ½νλ‘ λκ°μ μ°ΎκΈ°
- μ΄ κ³Όμ μ λ°λ³΅νλ€κ° λκΉμ§ λκ°λλ°λ μλ€λ©΄ ReferenceError λ°μ
μ΄μ²λΌ λ³μλ μμͺ½μμ λ°κΉ₯μͺ½ λ°©ν₯μΌλ‘ λκ°λ©΄μλ§ μ°Ύμ μ μκ³ ,
κ±°κΎΈλ‘ λ°κΉ₯μμ μμͺ½μΌλ‘ λ€μ΄μ€λ©΄μ μ°Ύλ κ²μ λΆκ°λ₯νλ€.
π§ μμ λ‘ μ΄ν΄λ³΄κΈ°
1) ν¨μ μμμ μ μ λ³μ μ°Έμ‘°νκΈ°
let x = 10;
function printX() {
console.log(x);
}
printX(); // 10
printX ν¨μ μμλ xλΌλ λ³μκ° μμΌλκΉ
ν λ¨κ³ λ°κΉ₯ μ€μ½νλ‘ λκ°μ (= μ μ μ€μ½ν) μ μ λ³μ xλ₯Ό λ°κ²¬νκ² λλ€.
λ°λΌμ μΆλ ₯μ μ μ λ³μ xμ κ°μΈ 10μ΄ λλ κ²μ΄λ€.
2) κ°μ μ΄λ¦μ μ§μλ³μμ μ μλ³μκ° μλ κ²½μ° (shadowing)
let x = 10;
function printX() {
let x = 20;
console.log(x);
}
printX(); // 20
console.log(x); // 10
λ¨Όμ printX ν¨μκ° νΈμΆλΌμ xλΌλ λ³μλ₯Ό μΆλ ₯νκΈ° μν΄ λ¨Όμ ν¨μ μμμ μ°Ύλ€ λ³΄λκΉ
μ§μ λ³μ x = 20μ΄λΌλ κ°μ΄ μμμ λ°κ²¬νκ² λκ³ ,
λ°λΌμ ν¨μ νΈμΆμ κ²°κ³Όλ‘ 20μ΄λΌλ κ°μ΄ μ½μμ μΆλ ₯λλ€.
(μ΄λ, λ°κΉ₯μ μλ μ μ λ³μμΈ x=10 μ μ§μλ³μμ κ°λ €μ Έμ(shadowing) ν¨μ μμμ μ κ·Όμ΄ λΆκ°λ₯νκ² λλ€.)
κ·Έλ¬λ λ°μ μλ console.log(x)μμλ λ°λλ‘ ν¨μ μμ μλ μ§μ λ³μμΈ x=10μ μ κ·Όν μκ° μμΌλκΉ
μ μΌ λ¨Όμ λ°κ²¬νκ² λλ x=10μ΄λΌλ μ μλ³μμ κ°μ μΆλ ₯νκ² λλ κ²μ΄λ€.
3) ν¨μ μμ ν¨μ (μ€μ²© μ€μ½ν 체μΈ)
let a = 1;
function outer() {
let b = 2;
function inner() {
let c = 3;
console.log(a, b, c);
}
inner();
}
outer(); // 1 2 3
μ΄ μμμ κ²½μ° νμ κ³Όμ μ μλμ κ°μ΄ μ§νλλ€.
- inner ν¨μ μμμ cλΌλ λ³μλ₯Ό λ°κ²¬νλ€.
- λ³μ bλ inner ν¨μ μμμ λ°κ²¬λμ§ μμΌλ,
ν λ¨κ³ λ°κΉ₯ μ€μ½νμΈ outer ν¨μλ‘ λκ°μ λ€μ νμνλ€κ° λ°κ²¬νλ€. - λ³μ aλ innerμμ λ°κ²¬μ΄ μ λΌμ
ν λ¨κ³ λ°κΉ₯ μ€μ½νμΈ outerμμ νμμ ν΄λ³΄μμ§λ§, μ¬μ ν λ°κ²¬λμ§ μμΌλ
ν λ¨κ³ λ λ°κΉ₯ μ€μ½νμΈ μ μ μ€μ½νκΉμ§ λκ°κ² λκ³ , μ¬κΈ°μμ λ°κ²¬νκ² λλ€.
4) λ°κΉ₯μμ μμͺ½ λ³μλ₯Ό μ κ·Όνλ €κ³ νλ κ²½μ°
function outer() {
let secret = "λΉλ°";
function inner() {
console.log(secret); // λΉλ°
}
inner();
}
outer();
console.log(secret); // β ReferenceError
μ΄μ²λΌ μμ μμ μ½λλ₯Ό μ€νν΄λ³΄λ©΄,
outer ν¨μλ₯Ό νΈμΆνμ λμλ κ·Έ μμμ inner ν¨μκ° νΈμΆλκ³ ,
console.log(secret); λΆλΆμμ secret λ³μλ₯Ό μ½μμ μΆλ ₯νλ €κ³ νλ€.
μ΄λ, inner ν¨μ μκΈ° μμ μμμλ secretμ΄λΌλ λ³μκ° λ°κ²¬λμ§ μμΌλκΉ
ν λ¨κ³ λ°κΉ₯μΌλ‘ λκ°μ outer ν¨μλ₯Ό νμνκ² λκ³ ,
μ¬κΈ°μμ secret λ³μλ₯Ό λ°κ²¬ν΄μ "λΉλ°"μ΄λΌλ κ°μ μ½μμ μΆλ ₯ν΄μ€λ€.
κ·Έλ¬λ κ°μ₯ νλ¨μ μλ console.log(secret);λ₯Ό μ€ννλ €κ³ λ³΄λκΉ
μκΈ° μμ μ μ€μ½νμΈ μ μ μ€μ½νμμ secret λ³μλ₯Ό μ°Ύμ보μμΌλ λ°κ²¬μ΄ λμ§ μμμ
λμ΄μ λ°κΉ₯μΌλ‘ λκ° κ³³μ΄ μμΌλ νμμ λ©μΆκ³ ReferenceErrorλ₯Ό λμ°κ² λλ€.
π κ²°λ‘
μ€μ½ν 체μΈκΉμ§ ν¬μ€ν μΌλ‘ μ 리ν΄λλ μλ°μ€ν¬λ¦½νΈκ° λ³μλ₯Ό μ΄λ»κ² μ°Ύλμ§κ° λ¨Έλ¦Ώμμ μ κ·Έλ €μ§λ κ² κ°λ€.
μ΄λ²μλ μμ μμΌλ‘ μ½λλ₯Ό μ§€ λ λ³μλ₯Ό μ μΈν μμΉλ₯Ό μ μ€μ΄ μ ν΄μΌ νκ³ ,
κ΄ν μ μ λ³μλ₯Ό λ¨λ°νλ©΄ μ΄λμμ κ°μ΄ λ°λμλμ§ μΆμ νκΈ° νλ€λ€λ κ²μ λ€μ λλΌκ² λμλ€.
'π»κ³΅λΆ κΈ°λ‘ > π 리μ‘νΈ κΈ°μ΄ μ€ν°λ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScript κ°μ²΄(Object) (1) | 2025.09.24 |
|---|---|
| [리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScript ν΄λ‘μ (Closuer) (1) | 2025.09.23 |
| [리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScript μ€μ½ν(scope) (0) | 2025.09.23 |
| [리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScript μ½λ°± ν¨μ (0) | 2025.09.21 |
| [리μ‘νΈ κΈ°μ΄ μ€ν°λ] JavaScriptμ μμ±μ ν¨μ λμ κ³Όμ (2) | 2025.09.20 |