![[JavaScript] 함수 레벨 스코프와 블록 레벨 스코프](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fd4WD2k%2FbtsL18ZtG4g%2FAAAAAAAAAAAAAAAAAAAAADnRI5nGesIVZ3znJlocLLuFzYH41UVuCgwlHy88-rMe%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D7AtQ1XJROjim9b2fX8SWCf029aI%253D)
자바스크립트의 스코프는 변수의 유효한 범위를 의미한다. var로 선언한 변수는 오직 함수의 중괄호 내부만을 유효 범위로 인정하는데, 이를 함수 레벨 스코프$_{function \space level \space scope}$라 한다. 반면 C나 자바 등 대부분의 프로그래밍 언어는 모든 중괄호(함수, if문, for문, while문 등) 내부를 유효 범위로 인정한다. 이러한 특성을 블록 레벨 스코프$_{block \space level \space scope}$라 한다.
var x = 1;
if (true) {
var x = 10;
console.log("if문 안쪽:", x);
}
console.log("if문 바깥쪽:", x);
위 예제를 보면 if문 내부와 외부에서 선언된 x
가 같은 변수를 가리킨다. var는 함수 레벨 스코프만 인정하기 때문에, if문의 중괄호는 새로운 스코프를 생성하지 않는다. 따라서 if문 내부의 var x = 10
은 전역 변수 x
를 재할당하는 것이다.
for (var i = 0; i < 5; i++) {
console.log("for문 안쪽:", i);
}
console.log("for문 바깥쪽:", i); // 5
대부분의 프로그래밍 언어에서는 for문의 변수 `i`는 루프 내부에서만 사용 가능한 지역 변수다. 반복이 끝나면 `i`는 사라지므로 외부에서 접근할 수 없다. 하지만 var로 선언된 변수는 블록 레벨 스코프를 따르지 않아 for문의 `i`가 전역 변수가 되기 떄문에, 의도치 않게 다른 코드와 충돌할 수 있다.
이런 문제를 해결하기 위해 ES6에서는 let과 const가 도입되었다. 이 키워드들은 블록 레벨 스코프를 지원해 변수의 유효 범위를 제한할 수 있다.
'Web, Front-end > JavaScript' 카테고리의 다른 글
[JavaScript] V8 엔진 (1) | 2025.02.02 |
---|---|
[JavaScript] 이벤트 루프(Event Loop)와 비동기 통신 (1) | 2025.02.01 |
[JavaScript] 스코프 체인 (scope chain) (1) | 2025.01.26 |
[JavaScript] 스코프(scope)란 (0) | 2025.01.25 |
[Javascript] 이벤트 전파 (1) | 2024.08.27 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!