
Scope(스코프)란?
자바스크립트는 기본적으로 함수 스코프를 따르며, 새로운 함수가 생성될 때 마다 새로운 스코프가 발생된다.
if(5 > 4) {
let secret = '12345';
}
console.log(secret)
위의 경우, 함수가 선언되지 않았기 때문에 새로운 스코프가 형성되지 않는다. 따라서 어디서나 secret변수에 접근이 가능하다.
function a() {
let secret = '12345';
}
console.log(secret)
위의 경우, 함수 선언과 동시에 a함수에 대한 새로운 스코프가 생성된다. 따라서 함수 바깥에서 지역변수인 secret에 접근하려고 하면 오류가 발생한다.
블록 스코프는 { } 중괄호에 의해 생성되는 스코프이다. 원래 자바스크립트는 함수 스코프를 따랐지만, let, const 변수에 등장으로 블록 스코프를 형성할 수 있게되었다.
function loop() {
for(var i = 0; i < 5; i++) {
console.log(i);
}
console.log('final',i);
}
loop();
다음과 같은 경우 var은 함수 스코프를 따르기 때문에, i는 { }중괄호 밖에 있음에도 불구하고 접근할 수 있다.
function loop() {
for(let i = 0; i < 5; i++) {
console.log(i);
}
console.log('final',i);
}
loop();
위 코드에서 var를 let으로 바꿨을 뿐인데, let은 블록 스코프를 따르기 때문에, { } 밖에서 접근이 불가능해져서 마지막 final을 출력할 때 오류가 발생하게 된다.