JavaScript 익히기 #13 scope method

Sunki-Kim·2022년 9월 11일
0

JavaScript 익히기

목록 보기
14/23

스코프의 종류를 볼때, 크게 코드를 전역과 지역으로 구분짓는다.

전역은 코드의 가장 바깥 영역을 해당하고, 지역은 함수 몸체 내부에 해당한다.

이때 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위인 스코프가 결정된다.


// scope method


// ** 전역 변수

var x = "global x";
var y = "global y";

function outer() { // ** 지역 변수
    var z = "outer's local z";

    console.log(x); // 1. global x
    console.log(y); // 2. global y
    console.log(z); // 3. outer's local z

    function inner() { // ** 지역 변수
        var x = "inner's local x";
        
        console.log(x); // 4. inner's local x
        console.log(y); // 5. global y
        console.log(z); // 6. outer's local z
    }
    
    
    inner();
}

outer();

console.log(x); // 7. global x
console.log(z); // 8. ReferenceError: z is not defined

전역에 변수를 선언하면 전역 스코프를 갖는 전역변수가 되며, 전역변수는 어디든지 참조할 수 있다. 즉, 함수 내부에서도 전역변수 참조가 가능하다.
지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다. (지역변수 z를 전역에서 참조할시 레퍼런스 에러가 발생)

Scope Chain

함수는 전역에서 정의할 수도 있고, 함수 몸체 내부에서 정의할 수도 있다. 함수 몸체 내부에서 함수가 정의된 것을 '함수의 중첩'이라 한다. 그리고 함수 몸체 내부에서 정의한 함수를 '중첩 함수', 중첩 함수를 포함하는 함수를 '외부 함수'라고 한다.

스코프는 함수의 중첩에 의해 계층적 구조를 갖는다
스코프 체인에 의한 변수를 검색할 때 상위 스코프에서 유효한 변수는 하위 스코프에서 자유롭게 참조할 수 있지만, 하위 스코프에서 유효한 변수를 상위 스코프에서 참조할 수 없다


// 전역 함수

function foo() {
    console.log('global function foo');
}

function bar() {
    // 중첩 함수
    function foo() {
        console.log('local function foo');
    }

    foo();
}
bar();

중첩함수에 해당하는 foo 에서 함수를 호출하면 자바스크립트 엔진이 함수를 호출하기 위해 먼저 함수를 가리키는 식별자 foo를 검색한다. 함수 자체도 식별자로 해당하기 때문에, 스코프를 갖는다.

소스코드

profile
당신에게 가치있는 Developer가 되고자

0개의 댓글