Contents

JavaScript Scope

JavaScript Scope란?

Scope [ skoʊp ]
1 (무엇을 하거나 이룰 수 있는) 기회[여지/능력] (=potential)
2 (주제조직활동 등이 다루는) 범위
3 샅샅이[자세히] 살피다.

스코프는 “유효 범위"로써 번수에 매개변수가 어디까지 유효한지를 나타냅니다.

자바스크립트에선 스코프는 2가지 타입이 있습니다. 바로 Global(전역)Local(지역)인데요.
함수 안에서 선언된 변수(Local 변수)는 함수 블록 안에서만 접근이 가능합니다.
전역 변수는 어디서든 접근이 가능합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// global 변수 선언
var a = 10;
console.log("global a: ", a)    // 10

// local 변수 선언
function print() {
    var b = 20;
    if (true) {
        var c = 30;
    }

    console.log("local b: ",b)  // 20
    console.log("local c: ",c)  // 30
}
print()
console.log("local b: ",b)  // ReferenceError: b is not defined

// ✨ Point
// b는 print함수 안에서 선언된 local 변수 임으로 
// print함수가 동작하는 안에서는 존재하지만, 
// print함수 밖에서는 존재하지 않습니다.

스코프는 렉시컬(Lexical)과 다이나믹(Dynamic)으로 분류.

렉시컬(Lexical) 스코프는 코드를 작성하는 시점에 스코프가 결정되어진다고 해서 정적 스코프라고도 부릅니다. Javascript는 대표적인 렉시컬 스코프입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
var a = "Global"

function print1() {
    console.log(a);
}

function print2() {
    var a = "Local";
    print1();
}

print1()    // Global
print2()    // Global

// print2에서 a를 "Local"로 재할당 했지만,
// print1()이 시작되면서 a는 print2()를 벗어나게 되고
// a는 "Global"로 돌아가게된다.