scope는 유효범위를 뜻한다.
변수의 생존기간을 제어하며 종류는 block scope
와 function scope
가 있다.
자바스크립트는 block scope
가 없고 function scope
가 있다. (때문에 모든 변수를 맨 처음에 선언하는 것이 암묵적 룰이 되었다.)
//변수의 선언
var a = 0;
//변수의 재선언
var a = 1;
console.log(a); //1
//변수 재할당
a = 3;
console.log(a); //3
변수는 재할당, 재정의가 가능해서 같은 변수를 다시 선언해도 ReferenceError
가 나타나지 않는다.
a = 1;
console.log(a); //1
위와 같이 선언을 하지 않은 경우도 값이 나오는 것을 볼 수 있다.
//hoisting 선언 생성
//var a;
a = 1;
console.log(a); //1
이렇게 할 수 있는 이유는 hoisting
으로 함수 안에 있는 선언들을 모두 가져와 해당 유효 범위의 최상단에 선언해주기 때문이다.
function testFun() {
for(var i = 0; i< 5; i++) {
}
console.log(i) //5
}
testFun();
console.log(i) //i is not defined
변수는 함수를 제외한 모든 블럭에서 접근이 가능하다.
//변수의 선언
let a = 0;
//변수의 재선언
let a = 1; // Identifier 'a' has already been declared
var
은 변수의 재선언이 가능해서 많은 문제점이 있었다.
하지만 let
과 const
는 재선언이 불가능하다.
변수를 재선언하는 경우는 자제해야 하는 방법이므로 가능하면 let
과 const
를 사용하는 것이 좋다.
let a = 0;
a = 1;
console.log(a); //1
const a = 0;
a = 1;
console.log(a); //Assignment to constant variable.
let
과 const
의 다른 점으로 let
은 재선언이 가능하다는 특징을 가지고 있다. 때문에 선언을 할 때는 상수인 const
로 하되, 필요에 따라 변수 let
을 사용하는 것을 권장하고 있다.
참고 사이트 : var, let, const 차이점