ππ¨μλ°μ€ν¬λ¦½νΈλ ν¨μ λ 벨 μ€μ½ν(function-level scope)λ₯Ό λ°λ₯Έλ€.
ν¨μ λ 벨 μ€μ½νλ ν¨μ μ½λ λΈλ‘ λ΄μμ μ μΈλ λ³μλ ν¨μ μ½λ λΈλ‘ λ΄μμλ§ μ ν¨νκ³ ν¨μ μΈλΆμμλ μ ν¨νμ§ μλ€(μ°Έμ‘°ν μ μλ€)λ κ²μ΄λ€.
ππ»λ¨, ECMAScript 6μμ λμ λ let keywordλ₯Ό μ¬μ©νλ©΄ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ¬μ©ν μ μλ€.
π¨π»π» Scopeλ?
Scopeλ μ§μνλ©΄ "λ²μ"λΌλ λ»μ΄λ€.
JavaScript μμ Scope(μ€μ½ν)λ λ³μμ μ κ·Όν μ μλ λ²μλ₯Ό λ§νλ€.
μλ³μ(λ³μ)λ₯Ό μ°ΎκΈ°μν κ·μΉμ΄λΌκ³ λ νλ€.
μλ³μμ μ ν¨ λ²μ ⇒ λͺ¨λ μλ³μλ μμ μ΄ μ μΈλ μμΉμ μνμ¬ λ€λ₯Έ μ½λκ° μλ³μ μμ μ μ°Έμ‘°ν μ μλ
μ ν¨ λ²μκ° κ²°μ λ¨.
var x = 'global';
function exampleFunction() {
// ν¨μ λ΄μ μ μΈλ x λ³μλ ν¨μ λ΄λΆμμλ§ μ°Έμ‘°κ°λ₯
var x = "declared inside function";
console.log(x);
}
exampleFunction(); // "declared inside function"
console.log(x); // 'global'
μ μμ μμ xκ° λλ² μ μΈλμλλ°, JavaScriptλ κ° xκ° μ΄λ€ κ°μ κ°μ§λμ§ μ΄λ»κ² ꡬλ³ν μ μμκΉ?
μ μμ μμ μ μμ μ μΈλ λ³μ xλ ν¨μ μμμλ λ°μμλ μ§ μ΄λμλ μ°Έμ‘°ν μ μλ€.
νμ§λ§ ν¨μ exampleFunction λ΄μμ μ μΈλ λ³μ xλ ν¨μ exampleFunction λ΄λΆμμλ§ μ°Έμ‘°ν μ μκ³ ,
μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
π«key point
π “μλ³μ μ κ·Ό κ·μΉμ λ°λ₯Έ μ ν¨ λ²μ”λ₯Ό μ€μ½νμ μ μλΌκ³ νλ€.
ν μ€μ½ν λ΄μμλ μλ³μκ° μ μΌν΄μΌ νμ§λ§, λ€λ₯Έ μ€μ½νμλ λλͺ μ μλ³μλ₯Ό μ¬μ©ν μ μμ.
( μ μμ μμ λ³μλͺ μ΄ κ°μ xλ₯Ό λκ° μ μΈ ν μ μμλ μ΄μ .)
⇒ λ€μμ€νμ΄μ€
μλ³μ κ²°μ (identifier resolution) : μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½νλ₯Ό ν΅ν΄μ μ΄λ€ λ³μλ₯Ό μ°Έμ‘°ν κ²μΈμ§ κ²°μ ν¨.
μ€μ½νμ νΉμ§
π κ·μΉ1. μμͺ½ μ€μ½νμμ λ°κΉ₯μͺ½ μ€μ½νλ‘ μ κ·Όν μ μμ§λ§ λ°λλ λΆκ°λ₯νλ€.
- λ°κΉ₯μͺ½ μ€μ½νμμ μ μΈν μλ³μλ μμͺ½ μ€μ½νμμ μ¬μ© κ°λ₯νλ€.
- λ°λ©΄, μμͺ½μμ μ μΈν μλ³μλ λ°κΉ₯μͺ½ μ€μ½νμμλ μ¬μ©ν μ μλ€.
π κ·μΉ2. μ€μ½νλ μ€μ²©μ΄ κ°λ₯νλ€.
- μ€μ½νλ λ§μΉ μ€μ²©λ μΈν리μλ κ°λ€.
π κ·μΉ3. μ μ μ€μ½νμ μ§μ μ€μ½ν
- κ°μ₯ λ°κΉ₯μͺ½μ μ€μ½νλ₯Ό μ μ μ€μ½ν(Global Scope)λΌκ³ λΆλ₯Έλ€.
- μ μμ΄ μλ λ€λ₯Έ μ€μ½νλ μ λΆ μ§μ μ€μ½ν(Local Scope)μ΄λ€.
π κ·μΉ4. μ§μ λ³μλ μ μ λ³μλ³΄λ€ μ°μ μμκ° λ λλ€.
- μ μ μ€μ½νμμ μ μΈν λ³μλ μ μ λ³μμ΄λ€.
- μ§μ μ€μ½νμμ μ μΈν λ³μλ μ§μ λ³μμ΄λ€.
- μ§μ λ³μλ μ μ λ³μλ³΄λ€ λ λμ μ°μ μμλ₯Ό κ°μ§λ€.
ν¨μ λ 벨 μ€μ½ν VS λΈλ‘ λ 벨 μ€μ½ν
μ§μ μ€μ½νλ ν¨μμ μν΄μ μμ±λλκ°, μ½λ λΈλ‘μ μν΄μ μμ±λλκ°μ λ°λΌ λ λ²¨μ΄ λλ¨.
π λΈλ‘ λ 벨 μ€μ½ν : if, for, while, try/catch, { } λ± μ½λ λΈλ‘μ΄ μ§μ μ€μ½ν μμ±
⇒ let, const ν€μλλ‘ μ μΈλ λ³μλ λͺ¨λ μ½λ λΈλ‘μ μ§μ μ€μ½νλ‘ μΈμ ν¨.
⇒ μ£Όμν΄μΌν μ μ νμ΄ν ν¨μλ λΈλ‘ μ€μ½νλ‘ μ·¨κΈλλ€.
{
var a = "A inner"
let b = "B inner"
const c = "C inner"
}
console.log(a)
console.log(b) //ReferenceError: b is not defined
// console.log(c) ReferenceError: c is not defined
ππ»varλ‘ μ μΈλ λ³μλ μ μΈλ ν¨μλ΄μμλ§ μ§μμ€μ½νλ‘ μΈμ νκΈ° λλ¬Έμ λΈλ‘μ€μ½νμμ μμλ
μΈλΆμμ νΈμΆ μ μ°Έμ‘°ν μ μμ§λ§,
ππ»let, constλ λΈλ‘λ 벨 μ€μ½νλ‘ if, for, while, try/catch λ± μ½λ λΈλ‘{ } μμ μμλ μ§μμ€μ½νλ‘ μΈμ μ νκΈ°μ
μΈλΆ νΈμΆ μ μλ¬κ° λ¨λ λͺ¨μ΅.
π ν¨μ λ 벨 μ€μ½ν : ν¨μκ° μ§μ μ€μ½ν μμ± ⇒ var ν€μλλ‘ μ μΈλ λ³μλ
μ€μ§ 'ν¨μ'λ§μ μ§μ μ€μ½νλ‘ μΈμ ν¨.
{
// ν¨μκ° μλ if, for, while, try/catch λ±
// μ½λ λΈλ‘μμμ μ§μμ€μ½ν μΈμ x
var x = "inner";
}
// {}μ€μ½ν λ°μμ xλ₯Ό μ½μλ‘ νΈμΆνμ§λ§ ν¨μλΈλ‘μ΄μλ μ½λλΈλ‘μ΄λΌ
console.log(x); // inner μΆλ ₯λ¨
function example() {
var x = "inner";
}
// ν¨μ μ€μ½νμ λ°λΌ ν¨μλ°μμ ν¨μμ λ³μμ μ κ·Ό λΆκ° μλ¬
console.log(x); // ReferenceError: x is not defined
π μ°Έκ³
https://developer.mozilla.org/ko/docs/Glossary/Scope
https://poiemaweb.com/js-scope
JS | μ λ΄, μλ°μ€ν¬λ¦½νΈ μ€μ½ν(Scope) μΈμμ΄λ€ π₯
'πTechnical interview(Front)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Promise (0) | 2022.11.16 |
---|---|
[JavaScript] μ€μ½ν 체μΈμ΄λ? (0) | 2022.11.09 |
μ½λ°± ν¨μ(Callback) (0) | 2022.11.03 |
Closure ν΄λ‘μ (0) | 2022.10.23 |
λΈλΌμ°μ μ£Όμμ°½μ Urlμ μ λ ₯νλ©΄ μ΄λ€ μΌμ΄ μΌμ΄λλκ°? (0) | 2022.10.23 |