본문 바로가기

■ 프로그래밍/JavaScript

스코프(Scope) (2) - 함수

함수 스코프는 몇 가지 주의사항이 있다. 전 글에 있는 예문을 그대로 가져와 보겠다. 

function isLocal() {
	var local = "지역변수";
	return `${local}는 로컬하다`
}

isLocal(); // output: 지역변수는 로컬하다

 

1. 함수는 서로의 스코프에 접근이 불가하다. 

function isLocal() {
    var local = "지역변수";
    return `${local}는 로컬하다`
}

function getIsLocal() {
    isLocal();
    console.log(local);
}

getIsLocal(); // output: Uncaught ReferenceError: local is not defined

2. 스코프 체인(Scope Chain): 함수가 다른 함수의 내부에 정의된 상태에서, 내부 함수는 외부 함수의 변수에 접근가능하지만, 외부 함수는 내부 함수의 변수에 접근이 불가하다. 

function first() {
	var one = 1;
    
    function second() {
    	var two = 2;
        console.log(one);
    }
    second();
    console.log(two);
}

first(); // output: 1, Uncaught ReferenceError: two is not defined

출력값의 1은 second()의 console.log(one)의 결과 값이고, ReferenceError는 first()의 console.log(two)에 대한 오류이다. 

var a = 100;

function outer() {
    var b = 50;
    
    function inner() {
    	var c = 30;
        console.log( a + b + c );
    }
    inner();
}
outer(); // output: 180

위 함수의 경우, console.log를 내부에서 실행시켰기 때문에 외부에 있는 모든 변수를 불러 올 수 있었다.