반응형
자바스크립트에서 변수선언에 있어 키워드로 var, let, const가 있다. 그 중 var의 특성중 하나가 함수레벨 스코프이다. 일반적인 C,Java같은 언어에서는 함수 뿐만 아니라 모든 코드블록(반복문, 조건문 등) 에서 지역 스코프를 만들게 된다. 이러한 특성을 블록 레벨 스코프라고 한다. 자바스크립트에서 변수 선언문 let키워드가 블록레벨 스코프 성격을 띄고있다.
반면 자바스크립트에서 var 키워드 같은 경우에는 '함수의 코드 블록'만 지역 스코프로 인정하게 된다. 이러한 특성을 함수레벨 스코프라고 한다. 예시를 들어보면 아래와 같이 들 수 있다.
var a = 10;
for(var i = 0;i < 3; i++){
var a = i;
console.log(i); // 0 1 2
}
function test(){
var a = 20;
console.log(20); // 20
}
console.log(a); // 2
test();
위 예제를 보면 알겠지만, for문에서 순차적으로 a를 재선언 하면서 값이 바뀌는걸 볼 수 있다. test()라는 함수에서도 a라는 변수를 20의 값으로 할당하고 test()를 실행했을때 잘 나오는것을 볼 수 있다. 하지만 전역환경에서 console.log(a)를 하면 20이 아닌 for문에서 최종값이었던 2가 출력되는것을 볼 수 있다.
반응형
'Language > JavaScript' 카테고리의 다른 글
[javascript]객체 변경방지 (0) | 2021.12.14 |
---|---|
[javascript] 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 (0) | 2021.12.14 |
[javascript] var VS let (0) | 2021.12.14 |