π λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ΅μ¬) 13μ₯. μ€μ½ν
01. μ€μ½νλ?
μ€μ½ν(scope, μ ν¨λ²μ)λ μλ³μκ° μ ν¨ν λ²μλ₯Ό λ§νλ€.
μλ³μλ₯Ό κ²μν λ μ¬μ©νλ κ·μΉμ΄λ€.
- μ€μ½νλ λ³μ, ν¨μμ κΉμ κ΄λ ¨μ΄ μλ€.
- var ν€μλλ‘ μ μΈν λ³μμ let λλ const ν€μλλ‘ μ μΈν λ³μμ μ€μ½νλ λ€λ₯΄κ² λμνλ€.
π₯οΈ μμ μ½λ
var var1 = 1;
if (true) {
var var2 = 2; // μ½λ λΈλ‘ λ΄μμ μ μΈν λ³μ
if (true) {
var var3 = 3; // μ€μ²©λ μ½λ λΈλ‘ λ΄μμ μ μΈν λ³μ
}
}
function foo() {
var var4 = 4; // ν¨μ λ΄μμ μ μΈν λ³μ
function bar() {
var var5 = 5; // μ€μ²©λ ν¨μ λ΄μμ μ μΈν λ³μ
}
}
console.log(var1); // 1
console.log(var2); // 2
console.log(var3); // 3
console.log(var4); // ReferenceError: var4 is not defined
console.log(var5); // ReferenceError: var5 is not defined
β‘οΈ λͺ¨λ μλ³μ(λ³μ μ΄λ¦, ν¨μ μ΄λ¦, ν΄λμ€ μ΄λ¦ λ±)λ μμ μ΄ μ μΈλ μμΉμ μν΄ λ€λ₯Έ μ½λκ° μλ³μ μμ μ μ°Έμ‘°ν μ μλ μ ν¨ λ²μκ° κ²°μ λλλ°, μ΄λ₯Ό μ€μ½νλΌκ³ νλ€.
π₯οΈ μμ μ½λ
var x = 'global';
function foo() {
var x = 'local';
console.log(x); // 1
}
foo();
console.log(x); // 2
β‘οΈ μλ³μ κ²°μ : μ΄λ¦μ΄ κ°μ λ κ°μ λ³μ μ€μμ μ΄λ€ λ³μλ₯Ό μ°Έμ‘°ν΄μΌ ν κ²μΈμ§ κ²°μ
β‘οΈ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½νλ₯Ό ν΅ν΄ μ΄λ€ λ³μλ₯Ό μ°Έμ‘°ν΄μΌ ν κ²μΈμ§ κ²°μ
β‘οΈ μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€νν λ μ½λμ λ¬Έλ§₯μ κ³ λ €νλ€.
β» λ μ컬 νκ²½ : μ½λκ° μ΄λμ μ€νλλ©°, μ΄λ€ μ½λκ° μλμ§
μ μμ μμ λ κ°μ x λ³μλ μλ³μ μ΄λ¦μ΄ λμΌνμ§λ§, μμ μ μ ν¨ν λ²μ(μ€μ½ν) κ° λ€λ₯Έ λ³κ°μ λ³μλ€.
02. μ€μ½νμ μ’ λ₯
κ΅¬λΆ | μ€λͺ | μ€μ½ν | λ³μ |
μ μ | μ½λμ κ°μ₯ λ°κΉ₯ μμ | μ μ μ€μ½ν | μ μ λ³μ |
μ§μ | ν¨μ λͺΈμ²΄ λ΄λΆ | μ§μ μ€μ½ν | μ§μ λ³μ |
1. μ μκ³Ό μ μ μ€μ½ν
- μ μμ΄λ μ½λμ κ°μ₯ λ°κΉ₯ μμμ λ§νλ€.
- μ μ λ³μλ μ΄λμλ μ§ μ°Έμ‘°ν μ μλ€.
2. μ§μκ³Ό μ§μ μ€μ½ν
- μ§μμ΄λ ν¨μ λͺΈμ²΄ λ΄λΆλ₯Ό λ§νλ€.
- μ§μ λ³μλ μμ μ μ§μ μ€μ½νμ νμ μ§μ μ€μ½νμμ μ ν¨νλ€.
03. μ€μ½ν 체μΈ
μ€μ½νλ ν¨μμ μ€μ²©μ μν΄ κ³μΈ΅μ ꡬ쑰λ₯Ό κ°μ§λ€.
μ€μ½νλ€ κ³μΈ΅μ μΌλ‘ μ°κ²°λ κ²μ μ€μ½ν 체μΈμ΄λΌ νλ€.
β‘οΈ μΈλΆ ν¨μμ μ§μ μ€μ½νλ₯Ό μ€μ²© ν¨μμ μμ μ€μ½νλΌ νλ€.
π‘ λͺ¨λ μ€μ½νλ νλμ κ³μΈ΅μ κ΅¬μ‘°λ‘ μ°κ²°λλ©°, λͺ¨λ μ§μ μ€μ½νμ μ΅μμ μ€μ½νλ μ μ μ€μ½νλ€.
π‘ μλ°μ€ν¬λ¦½νΈ μμ§μ λ³μλ₯Ό μ°Έμ‘°ν λ) μ€μ½ν 체μΈμ ν΅ν΄ λ³μλ₯Ό μ°Έμ‘°νλ μ½λμ μ€μ½νμμ μμνμ¬ -> μμ μ€μ½ν λ°©ν₯μλ₯΄ μ΄λνλ©° μ μΈλ λ³μλ₯Ό κ²μ
1. μ€μ½ν 체μΈμ μν λ³μ κ²μ
- μ€μ½ν 체μΈμ λ°λΌ λ³μλ₯Ό μ°Έμ‘°νλ μ½λμ μ€μ½ν - μμ μ€μ½ν λ°©ν₯μΌλ‘ μ΄λνλ©° μ μΈλ λ³μ κ²μ
β οΈ μμ μ€μ½νμμ μ ν¨ν λ³μλ νμ μ€μ½νμμ μμ λ‘κ² μ°Έμ‘° O
β οΈ νμ μ€μ½νμμ μ ν¨ν λ³μλ₯Ό μμ μ€μ½νμμ μ°Έμ‘° X
2. μ€μ½ν 체μΈμ μν ν¨μ κ²μ
- ν¨μλ μλ³μμ ν΄λΉλκΈ° λλ¬Έμ μ€μ½νλ₯Ό κ°λλ€.
04. ν¨μ λ 벨 μ€μ½ν
- λΈλ‘ λ 벨 μ€μ½ν : ν¨μ λͺΈμ²΄λ§μ΄ μλλΌ, λͺ¨λ μ½λ λΈλ‘(if, for, while, try/catch λ±)μ΄ μ§μ μ€μ½νλ₯Ό λ§λλ κ²
- ν¨μ λ 벨 μ€μ½ν : var ν€μλλ‘ μ μΈλ λ³μκ° μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘(ν¨μ λͺΈμ²΄)λ§μ μ§μ μ€μ½νλ‘ μΈμ νλ κ²
μμ μ½λλ₯Ό ν΅ν΄ μ΄ν΄λ³΄μ.
π₯οΈ μμ μ½λ
var x = 1;
if (true) {
var x = 10;
}
console.log(x); // 10
β‘οΈ μ μ λ³μ xκ° μ μΈλμκ³ , if λ¬Έμ μ½λ λΈλ‘ λ΄μμλ x λ³μκ° μ μΈλμλ€.
β‘οΈ μ΄λ if λ¬Έμ μ½λ λΈλ‘ λ΄μμ μ μΈλ x λ³μλ μ μ λ³μλ€.
π‘ var ν€μλλ‘ μ μΈλ λ³μλ ν¨μ λ 벨 μ€μ½νλ§ μΈμ νκΈ° λλ¬Έμ ν¨μ λ°μμ var ν€μλλ‘ μ μΈλ λ³μλ λͺ¨λ μ μ λ³μλ€.
π‘ let, const ν€μλλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ§μνλ€.
05. λ μ컬 μ€μ½ν
μμ μ½λλ₯Ό ν΅ν΄ μ΄ν΄λ³΄μ.
π₯οΈ μμ μ½λ
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // ?
bar(); // ?
μ μμ μ μ€ν κ²°κ³Όλ bar ν¨μμ μμ μ€μ½νκ° λ¬΄μμΈμ§μ λ°λΌ κ²°μ λλ€.
1. ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ€. - λμ μ€μ½ν
2. ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ€. - λ μ컬 μ€μ½ν(μ μ μ€μ½ν)
κ²°λ‘ λΆν° λ§νμλ©΄, μλ°μ€ν¬λ¦½νΈλ λ μ컬 μ€μ½ν(μ μ μ€μ½ν)λ₯Ό λ°λ₯΄λ―λ‘, ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νλ€.
- μ μμ μ bar ν¨μλ μ μμμ μ μλ ν¨μλ€.
- ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ bar ν¨μλ μ μ μ½λκ° μ€νλκΈ° μ μ λ¨Όμ νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€.
- μ΄λ μμ±λ bar ν¨μ κ°μ²΄λ μμ μ΄ μ μλ μ€μ½ν, μ¦ μ μ μ€μ½νλ₯Ό κΈ°μ΅νλ€.
- κ·Έλ¦¬κ³ bar ν¨μκ° νΈμΆλλ©΄ νΈμΆλ κ³³μ΄ μ΄λμΈμ§ κ΄κ³μμ΄ μμ μ΄ κΈ°μ΅νκ³ μλ μ μ μ€μ½νλ₯Ό μμ μ€μ½νλ‘ μ¬μ©νλ€.
- λ°λΌμ ?μλ λ λ² λͺ¨λ μ μ λ³μ xμ κ° 1 μ μΆλ ₯ν κ²μ΄λ€.
π μ°Έκ³ μλ£