μ€μ½ν(μ ν¨ λ²μ, Scope)
μ€μ½νλ, λͺ¨λ μλ³μ(λ³μ μ΄λ¦, ν¨μ μ΄λ¦, ν΄λμ€ μ΄λ¦ λ±)λ μμ μ΄ μ μΈλ μμΉμ μν΄ λ€λ₯Έ μ½λκ° μλ³μ μμ μ μ°Έμ‘°ν μ μλ μ ν¨ λ²μκ° κ²°μ λ©λλ€. μ¦, μ€μ½νλ μλ³μκ° μ ν¨ν λ²μλ₯Ό λ»ν©λλ€.
MDNμ λ°λ₯΄λ©΄ μ€μ½νλ νμ¬ μ€νλλ 컨ν μ€νΈλ₯Ό λ§ν©λλ€. μ¬κΈ°μ 컨ν μ€νΈλ κ°κ³Ό ννμμ΄ "νν"λκ±°λ μ°Έμ‘°λ μ μμμ μλ―Έν©λλ€. λ§μ½ λ³μ λλ λ€λ₯Έ ννμμ΄ "ν΄λΉ μ€μ½ν"λ΄μ μμ§ μλ€λ©΄ μ¬μ©ν μ μμ΅λλ€. μ€μ½νλ λν κ³μΈ΅μ μΈ κ΅¬μ‘°λ₯Ό κ°μ§κΈ° λλ¬Έμ νμ μ€μ½νλ μμ μ€μ½νμ μ κ·Όν μ μμ§λ§ λ°λλ λΆκ°ν©λλ€.
<μμ 1>
function exampleFunction() {
var x = "declared inside function";
// xλ μ€μ§ exampleFunction λ΄λΆμμλ§ μ¬μ© κ°λ₯.
console.log("Inside function");
console.log(x);
}
console.log(x); // μλ¬ λ°μ
κ·Έλ¬λ μλμ κ°μ μ½λλ λ³μκ° ν¨μ μΈλΆμ μ μμμ μ μΈλμκΈ° λλ¬Έμ μ ν¨ν©λλ€.
<μμ 2>
var x = "declared outside function";
exampleFunction();
function exampleFunction() {
console.log("Inside function");
console.log(x);
}
console.log("Outside function");
console.log(x);
var
, ν¨μ μ€μ½ν(Function Scope)
var
ν€μλλ ν¨μ μ€μ½ν(Function Scope)μ
λλ€.
μ΄λ μμ±λ ν¨μ λ΄μμλ§ μ¬μ©ν μ μμΌλ©°, ν¨μ λ΄λΆμμ μμ±λμ§ μμ κ²½μ° μ μ λ²μλ₯Ό κ°μ§λλ€.
function eun() {
var name = 'goong';
console.log(name); // 'goong'
}
eun(); // 'goong'
console.log(name); // name is not defined
μ μμ λ₯Ό 보면 ν¨μ λ΄λΆμμ μ μΈλ var
ν€μλλ‘ μ μΈλ λ³μ name
μ ν¨μ μΈλΆμμ μ κ·Όν μ μμ΅λλ€. μ κ·Όνλ μλ¬κ° λ©λλ€.name
λ³μλ μ μ λ³μλ‘ μ μΈ λκ²μ΄ μλκΈ°μ eun
ν¨μ μ€μ½ν λ΄μμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€.
νμ§λ§ if λ¬Έ, loop λ¬Έ λ±κ³Ό κ°μ λ€λ₯Έ μ νμ λΈλ‘μμλ μ€μ½νλ‘ κ°μ£Όλμ§ μμ΅λλ€.
var age = 26;
if (true) {
var korAge = age + 1;
console.log(`Your Korean Age is ${korAge}!`); // 'Your Korean Age is 27!'
}
console.log(korAge); // 27
μ μμ λ₯Ό 보면 if λ¬Έ λ΄μ var
ν€μλλ‘ μ μΈλ λ³μ korAge
λ if λ¬Έ μΈλΆμμ μ¬μ©ν μ μμ΅λλ€. var
ν€μλλ ν¨μ μ€μ½νλ₯Ό μ μΈν λ€λ₯Έ μ€μ½νλ κ°μ μ€μ½νλ‘ κ°μ£ΌνκΈ° λλ¬Έμ
λλ€.
let
, const
, λΈλ‘ μ€μ½ν(Block Scope)
ES6μμλ λ³μλ₯Ό μ μΈνλ λ체 λ°©λ²μΌλ‘ let
, const
ν€μλκ° λμ
λμμΌλ©°, μ΄ λμ λΈλ‘ μ€μ½νλ₯Ό κ°μ§λλ€.
ν¨μ μ€μ½νλ§ μ€μ½νλ‘ μ·¨κΈνλ var
ν€μλμλ λ¬λ¦¬ λΈλ‘ μ€μ½νμμλ λͺ¨λ λΈλ‘μ΄ μ€μ½νκ° λ©λλ€.
λΈλ‘μ΄λ? μ¬λ μ€κ΄νΈ '{'μ λ«λ μ€κ΄νΈ '}'μ μ§ν©μ
λλ€.
var age = 26;
if (true) {
let korAge = age + 1;
console.log(`Your Korean Age is ${korAge}!`); // 'Your Korean Age is 27!'
}
console.log(korAge); // Uncaught ReferenceError: korAge is not defined
μμ μμ μμλ var
ν€μλλ₯Ό let
ν€μλλ‘λ§ λ체νμ¬ λ³μλ₯Ό μ μΈνμ΅λλ€.let
ν€μλλ‘ μ μΈλ korAge
λ³μλ μ½μμμ νμ
μλ¬λ₯Ό μΌμΌν΅λλ€.let
, const
ν€μλλ var
ν€μλμ λ¬λ¦¬ ν¨μ μ€μ½νκ° μλ λΈλ‘ μ€μ½νλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ
λλ€.
μμ μμμ let
ν€μλλ₯Ό const
ν€μλλ‘ λ체ν΄λ λμΌν κ²°κ³Ό κ°μ΄ μΆλ ₯λ©λλ€.
λ μ컬 μ€μ½ν(Lexical Scope)
λ μ컬 μ€μ½νλ μ€μ²©λ ν¨μ κ·Έλ£Ήμμ λ΄λΆ ν¨μκ° μμ λ²μμ λ³μ λ° κΈ°ν 리μμ€μ μ‘μΈμ€ ν μ μμμ μλ―Έν©λλ€.
μ¦, ν¨μλ₯Ό μ΄λμ μ μΈνμλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νλ€λ λ»μ΄λ©°, κ°μ₯ μ€μν μ μ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλλΌ μ΄λμ μ μΈνμλμ§μ λ°λΌ κ²°μ λ©λλ€.
λ€λ₯Έ λ§λ‘, μ μ μ€μ½ν(Static Scope)λΌ λΆλ₯΄κΈ°λ ν©λλ€.
<μμ >
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
μ μμ λ₯Ό λ³΄λ― Javascriptλ λ μ컬 μ€μ½νλ₯Ό λ°λ₯΄κΈ°μ ν¨μλ₯Ό μ μΈν μμ μ μμ μ€μ½νκ° κ²°μ λ©λλ€. ν¨μλ₯Ό μ΄λμ νΈμΆνμλμ§λ μ€μ½ν κ²°μ μ μλ¬΄λ° μν₯μ μ£Όμ§ μμ΅λλ€. μ μμ μ bar
ν¨μλ μ μμ μ μΈλμκΈ°μ bar
ν¨μμ μμ μ€μ½νλ μ μ μ€μ½νμ΄κ³ , λ°λΌμ μ μ λ³μ xμ κ° 1μ λλ² μΆλ ₯ν©λλ€.
Summary
var
ν€μλλ ν¨μ μ€μ½ν(Function Scope). λ²μλ ν¨μ μ.let
,const
ν€μλλ λΈλ‘ μ€μ½ν(Block Scope) λ²μλ μ€κ΄νΈ μ.- λ μ컬 μ€μ½ν(Lexical Scope)λ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλ μ΄λμ μ μΈνμλμ§μ λ°λΌ κ²°μ λ¨.
'π₯ Front-End > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JS] λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive - μ°μ°μ (0) | 2022.04.07 |
---|---|
[JS] λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive - λ°μ΄ν° νμ (0) | 2022.04.06 |
[JS] 4. μμμ νλ³ν, λͺ μμ νλ³ν, Nominal, ꡬ쑰ν, λ νμ΄ν (0) | 2022.03.31 |
[JS] 5. == & === & typeof (0) | 2022.03.22 |
[JS] 3. κ° νμ (Value Type) & μ°Έμ‘° νμ (Reference Type) (0) | 2022.03.22 |