프로그래밍 언어/Javascript
var와 let의 차이
Giant Oreo
2021. 6. 16. 12:09
var 보다는 let을 쓰자
var대신 let을 써도 변수를 선언하고 할당하는 데 큰 차이가 없지만,
var는 초기 자바스크립트 구현 방식에서 사용한 방법이기 때문에 최근에는 let을 사용하고 있다.
그럼 let과 var의 차이점은 어떤 것이 있는가?
var는 블록 스코프가 없다
var로 선언한 변수의 스코프는 함수 스코프이거나 전역 스코프이다.
블록 기준이 아니기 때문에 if문과 같은 블록문 밖에서도 접근이 가능하다.
if(true){
var test = "안녕";
}
alert(test); //if문 끝나도 해당 변수 접근 가능
만약 var대신 let으로 변수를 선언했다면 if문 안에서만 접근이 가능하다.
for(var i=0;i<10;i++){
// ...
}
alert(i); //반복문이 종료되어도 var로 선언한 i에 접근 가능
var는 재선언이 가능하다
let test;
let test; //let은 재선언한 경우 선언할 수 없다는 에러메세지를 띄운다.
var user = "안녕";
var user = "hi"; //사용가능
hoisting
var변수는 선언 전 사용할 수가 있다. 이게 뭔 소리냐?
호이스팅 개념 때문에 함수에서 선언 하기 전 먼저 값을 할당해서 사용할 수 있다는 소리이다.
함수가 실행될 때 가장 먼저 var로 선언한 명령문이 실행되기 때문이다.
function test(){
text = "안녕";
alert(text);
var text;
}
test();
그러나 주의점이 있다.
선언은 호이스팅 되지만 할당은 호이스팅되지 않는다.
예제보면 이해될 거다.
function test(){
alert(test); //undefined
var text = "안녕";
}
test();
test라는 함수가 호출되어 실행되면,
text라는 변수가 선언이 가장 먼저 되지만, "안녕"이라는 값은 할당되지 않는다.
그렇기 때문에 undefined라는 오류가 alert창에서 뜨는 것이다.
즉시 실행함수 표현식
과거 var만 사용할 수 있었던 시절, 블록 스코프가 없다는 단점을 보완하기 위해 즉시 실행함수 표현식(IIFE)를 사용했고,
요즘에는 자주 쓰이지 않는다.
예시
(function(){
//....
})();
요약
var는 블록 스코프가 적용되지 않으며, 호이스팅 된다.