μ€μ½νλ ? πΆ
- μ€μ½νλ, λͺ¨λ μλ³μ(λ³μ,ν¨μ,ν΄λμ€ λ±)λ μ μΈλ μμΉμ λ°λΌ μ°Έμ‘°ν μ μλ μ ν¨λ²μκ° κ²°μ λλλ° μ΄ λ§μ μ¦, μ€μ½νλ μλ³μκ° μ ν¨ν λ²μλΌ ν μ μλ€.
μ€μ½νμ μ’ λ₯
- μ€μ½νλ μ μ μ€μ½ν(global scope)μ μ§μ μ€μ½ν(local scope)κ° μλ€.
- μ€μ½νλ μλ³μλ₯Ό μ μΈν λ μ ν΄μ§λ©° μ΄λ° κ°λ μ λ μ컬 μ€μ½νλΌ νλ€.
- ν¨μλ μ μν¨μμ λ΄λΆμλ μ μν μ μλ€. ν¨μμ λ΄λΆμμ μ μλ ν¨μλ₯Ό μ€μ²© ν¨μλΌ νλ©° μ€μ²©ν¨μλ₯Ό ν¬ν¨νλ ν¨μλ₯Ό μΈλΆ ν¨μλΌκ³ νλ€.
- ν¨μκ° μ€μ²©λ λ μ§μμ€μ½νλ μ€μ²©λ μ μλ€. μ¦, μΈλΆ ν¨μμ μ§μ μ€μ½νμ μ€μ²© ν¨μμ λ΄λΆμ μ§μ μ€μ½νλ κ³μΈ΅μ ꡬ쑰λ₯Ό κ°μ§κ³ μ΄λ μΈλΆ ν¨μμ μ§μμ€μ½νλ₯Ό μ€μ²© ν¨μμ μμ μ€μ½νλΌ νλ€.
var x = 'μ μ λ³μx'
var y = 'μ μ λ³μy'
const outer = () => {
var z = 'outer μ§μ λ³μz';
const inner = () => {
var x = 'inner μ§μ λ³μx'
}
}
console.log(x); // μ μ λ³μx
console.log(z); // z is not defined
- μ μ λ³μ xμ yλ μ μ μ€μ½νλ₯Ό κ°μ§λ μ μλ³μκ° λλ€.
- μ§μ λ³μ zλ μ μΈλ μ§μ(outerν¨μ)μ μ§μ μ€μ½νλ₯Ό κ°μ§λ©° νμ μ§μ μ€μ½ν κΉμ§λ μ ν¨νλ€.
- inner ν¨μμ μ§μ λ³μ xλ innerν¨μ μμμλ§ μ°Έμ‘°ν μ μλ€. innerν¨μ λ΄μμ xλ₯Ό μ¬μ©ν κ²½μ° μ μ λ³μ xκ° μλ μ§μ λ³μ xκ° μ°Έμ‘°λλ€. μ΄μ λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ€μ½ν 체μΈμ ν΅ν΄ μ°Έμ‘°ν λ³μλ₯Ό κ²μνκΈ° λλ¬Έ.
λ³μμ μ€μ½ν (var, let, const)
var
var b = 5;
function varTest (){
var a = 10;
console.log(b); // 5 μ μλ³μ
for (i=0; i <= a; i++){
var c = 15;
console.log(a); // 10 ν¨μ λ΄ μ ν¨λ²μ
}
console.log(c); // 15 ν¨μ λ΄ μ ν¨λ²μ
}
varTest();
console.log(a); //a is not defined
console.log(b); // 5 μ μλ³μ
- varμ ν¨μλ 벨μ€μ½ν(Function Level Scope)β λ€.
- ν¨μλ 벨μ€μ½νλ ν¨μ λ΄μμ μ μΈλ λ³μμ λ²μλ ν¨μ λ΄λΆμ΄λ©° ν¨μ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
- ν¨μλ΄λΆ μ μΈ -> μ§μλ³μ
- ν¨μμΈλΆ μ μΈ -> μ μλ³μ
let, const
let b = 5;
function letTest (){
let a = 10;
console.log(b); // bλ μ μλ³μ μ¬μ©κ°λ₯
for (i=0; i <= a; i++){
let c = 15;
console.log(a); // ν¨μμ μ½λλΈλ‘μμ μ μΈ. μ§μλ³μλ‘ μ¬μ©κ°λ₯
}
console.log(c); // c is not defined λΈλ‘ λ΄ μ μΈν λ³μ μλ¬.
}
letTest();
console.log(a,c); //a,c is not defined
console.log(b); // 5 μ μλ³μ
- let, const λ λΈλ‘ λ 벨 μ€μ½ν(Function Level Scope)β λ€.
- λΈλ‘ λ 벨 μ€μ½νλ μ½λ λΈλ‘ { } λ΄μμ μ μΈλ λ³μλ μ½λ λΈλ‘ λ΄μμλ§ μ ν¨νκ³ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
- λΈλ‘ λ΄λΆμμ μ μΈν λ³μ -> μ§μ λ³μ
- λΈλ‘ μΈλΆμμ μ μΈν λ³μ -> μ μ λ³μ
β» var, letμ μ μΈν λ κ°μ μ£Όμ§ μμλ λμ§λ§ constλ μ΄κΈ°κ° ν λΉμ΄ νμβ
β» var,letμ μ¬ν λΉ κ°λ₯, const μ¬ν λΉ λΆκ°λ₯β
λ μ컬 μ€μ½ν(Lexical Scope)
- λ μ컬 μ€μ½νλ, ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλ μ΄λμμ μ μΈνμλμ§μ λ°λΌ κ²°μ λλ κ²μ λ§νλ€.
- ν¨μλ₯Ό μ΄λμ μ μΈνμλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νλ€λ λ»μ΄λ©° ν¨μμ μ μΈμ λ°λΌ κ²°μ λλ€λ κ²μ΄ μ€μνλ€.
- μ μ μ€μ½ν(static scope) λΌ λΆλ₯΄κΈ°λ νλ€. ( λ°λλ‘ νΈμΆμ μν΄ μμ μ€μ½νλ₯Ό κ²°μ νλ©΄ λμ μ€μ½ν(Dynamic Scope) λΌ νλ€, )
- μλ°μ€ν¬λ¦½νΈλ μ μ μ€μ½νλ₯Ό λ°λ₯Έλ€.
var x = 1;
function test() {
var x = 3;
test2();
}
function test2() {
console.log(x);
}
test(); // ?
test2(); // ?
- ν΄λΉ μ½λμμ μΆλ ₯κ°μ μ μ λ³μ x = 1 μ΄ λλ²μΆλ ₯λλ€.
- λ μ컬 μ€μ½νλ‘ μΈν΄ test, test2 ν¨μκ° μ μΈλ μμΉμ λ°λΌ μμμ€μ½νλ₯Ό κ²°μ νλ―λ‘ testμμ test2λ₯Ό νΈμΆνλ€ μ΄λ―Έ test2μ μ€μ½νλ μ μΈλ μμΉλ‘ μΈν΄ μμ μ€μ½νκ° μ μ μ€μ½νκ° λμ΄μκΈ°μ 1μ΄ λλ² μΆλ ₯λ κ² μ΄λ€.
- μ μλ³μλ₯Ό μΈμνλ λ°©λ²μ μλ €λ©΄ μ€μ½ν 체μΈβμ μμμΌνλ€.
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
this (0) | 2022.10.13 |
---|---|
μ€μ½ν 체μΈ(Scope chain) (2) | 2022.08.28 |
μ€λ³΅μμ μ κ±°λ°©λ²μ μμ보μ (0) | 2022.08.26 |
sort λ©μλλ₯Ό λ°°μ보μ (0) | 2022.08.24 |
toStringμ μμ보μ (0) | 2022.08.20 |