var는 "함수레벨스코프" "의도치 않은 호이스팅" "의도치 않은 변수 재할당" 과 같은 단점이 있어 대체로 쓰지 않는 것을 권장한다. ES6부터 이러한 var의 단점을 보완한 키워드 let과 const가 나왔다. 그럼에도 var를 쓰게 되는 경우가 있다면 아래 3가지 상황 때문일 것이다. 1)오래된 브라우저와의 호환성을 지켜야 하는 상황 2)기존에 작성한 코드나 라이브러리가 var로 쓰여져있는 레거시 코드일 경우 3)함수레벨스코프가 특정 상황에 유용하게 쓰이는 경우(정말 흔치 않기에 역시 let과 const 권장)
함수 레벨 스코프와 블록 레벨 스코프는 변수의 범위 제한에서 차이가 있다. 함수레벨스코프에서의 변수의 유효범위는 함수 내 "{ ... }" 영역까지이며 블록레벨스코프에서의 변수의 유효범위는 해당 블록의 "{ ... }" 영역까지이다. 뭐야 똑같은거 아니야??라고 생각할 수 있겠지만 만약 함수가 굉장히 길어지는 것을 생각해보면 블록 레벨 스코프가 안정성과(변수의 유효범위가 충돌할 확률이 적어짐) 유지보수성 측면에서 훨씬 유용함을 알 수 있다.
앞서 (2)번에서 설명하였다. var로 a를 선언했는데 그 뒤에 100줄 이상의 코드를 작성했다고 가정해보자. 더구나 몇 달전에 작성한 코드를 당장 유지보수 해야 하는 상황이다. 과연 a라는 변수가 있었는지 없었는지 기억할 수 있을까? 이와 같은 상황에서 재할당이 가능한 var로 a를 선언했다면 분명 예기치 못한 문제가 발생할 가능성이 크다.
변수 선언은 컴퓨터에게 해당 이름을 사용하여 데이터를 저장할 수 있는 공간을 마련해달라고 요청하는 것이며, 할당은 그러한 공간에 실제 값을 넣는 행위이다. 할당을 통해 실제 데이터 값이 저장되고 그 값을 사용할 수 있게 되는 것이다.
V8 엔진, SpiderMonkey, JavaScriptCore와 같은 자바스크립트 엔진에 있다. 자바스크립트 엔진은 웹브라우저나 Node.js와 같은 실행환경 안에 내포되어 있다. 엔진은 자바스크립트 코드를 실행하기 위한 핵심 역할을 수행하며, 코드의 파싱, 컴파일, 실행 등을 처리한다.