스코프 와 스코프 체인

tk_jang·2022년 6월 13일

자바스크립트

목록 보기
5/7

1.스코프란

function add( a, b ){
	console.log(a,b);
    return a+b;
}
add(3,6);
console.log(a,b)

변수 a와 b 가 본인이 선언된 위치에 따라 유효 범위가 정해졌습니다.
이런 유효 범위를 스코프라고 합니다.

변수이름 ,함수이름, 클래스 이름과 같은 식별자가
본인이 선언된 위치에 따라 다른 코드에서 자신이 참조될 수 있을지 없을지 결정되는 것

자바스크립트는 블록 스코프(block scope)가 아닌 함수 스코프를 사용하므로, 함수 내에 정의된 변수는 해당 함수 내에서만 사용할 수 있고 유효하다.

2.스코프 체인

지역 변수를 어떤 객체의 프로퍼티로 생각한다면, 자바스크립트의 모든 코드는 스코프 체인을 갖고 있다. 스코프 체인은 해당 코드의 유효 범위(in scope) 안에 있는 변수를 정의하는 객체의 체인, 리스트다.

자바스크립트가 변수 값을 얻으려고 할 때(variable resolution, 변수 해석) 스코프 체인에서 변수를 찾는다. 스코프 체인은 위에서 말했다시피 객체의 리스트이므로, 첫 번째 객체에서 해당 변수를 찾고, 없으면 그 다음 객체에서 해당 변수를 찾고, 여기도 없으면 그 다음 객체에서 찾는 식이다. 리스트의 끝까지 탐색했는데도 그 변수가 없다면 reference error가 발생하는 것이다.

최상위 자바스크립트 코드(어떠한 함수에도 속하지 않는 코드)의 스코프 체인에는 하나의 객체만 있고, 그것이 전역 객체이다. 중첩되지 않은 함수의 스코프 체인은 2개의 객체로 이루어진다. 하나는 함수의 매개변수와 지역 변수를 정의하는 객체고, 다른 하나는 전역 객체다.

var x = "나는 전역 x야";

function outer(){

	var y = "나는 outer 함수의 지역y야";
    console.log(y);   // 나는 outer 함수의 지역y야
    console.log(x);   // 나는 전역 x야
    --------------------------------------------
    function inner(){       
     	var x = "나는 inner 함수의 지역x야";
     	console.log(y); // 나는 outer 함수의 지역y야
        console.log(x); // 나는 inner 함수의 지역x야
    }
    -------------------------------------------
    inner();
}

outer();
console.log(y);  // 에러
console.log(x);  // 나는 전역 x야

0개의 댓글