JavaScript
javaScript-스코프4 (함수 레벨 스코프)
용용it
2023. 3. 2. 16:17
지역은 함수 몸체 내부를 말하고 지역은 지역 스코프를 만든다고 했는데,
이는 코드 블록이 아닌 함수에 의해서만 지역 스코프가 생성된다는 뜻이다.
c나 자바 등을 비롯한 대부분의 프로그래밍 언어는 함수 몸체만이 아니라 모든 코드블록(if, for, while, try 등)이 지역 스코프를 만든다.
이러한 특성을 블록 레벨 스코프라 한다.
하지만 var 키워드로 선언된 변수는 오로지 함수의 코드블록만을 지역 스코프로 인정한다.
이러한 특성을 함수 레벨 스코프라 한다.
var x = 1;
if (true){
// var 키워드로 선언된 변수는 함수의 코드 블록(함수 몸체)만을 지역 스코프로 인정한다.
// 함수 밖에서 var 키워드로 선언된 변수는 코드 블록 내에서 선언되었다 할지라도 모두 전역 변수다.
// 따라서 x는 전역 변수다. 이미 선언된 전역 변수 x가 있으므로 x 변수는 중복 선언된다.
// 이는 의도치 않게 변수 값이 변경되는 부작용을 발생시킨다.
var x = 10;
}
console.log(x); // 10
var i = 10;
// for 문에서 선언한 i는 전역 변수다. 이미 선언된 전역 변수 i가 있으므로 중복 선언된다.
for (var i = 0; i < 5; i++) {
console.log(i); // 0 1 2 3 4
}
// 의도치 않게 변수의 값이 변경되었다.
console.log(i); // 5
for 문에서 반복을 위해 선언된 i 변수가 for 문의 코드 블록 내에서만 유효한 지역 변수다.
이 변수를 for 문 외부에서 사용할 일이 없기 때문이지만 var 키워드로 선언된 변수는 블록 레벨 스코프를 인정하지 않기 때문에 i 변수는 전역 변수가 된다.
그 결과 의도치 않은 전역 변수의 값이 재할당된다.
또한 let, const 키워드는 블록 레벨 스코프를 지원한다.