이번 페이지에서는 javascript 매개변수 명령어인 let과 var의 차이점에 대해서 알아보겠습니다.
우선 개발시점으로 보자면
var가 먼저 나오고
let이 나중에 나왔습니다. (2015년 쯤, javascript가 ES6로 업그레이드 될 때, 나왔을 겁니다.)
당시, var 보다는 let사용을 권장했었죠.
1. 중복선언 가능
-. var : 중복선언 가능
-. let : 중복선언 불가능
위의 내용을 아래의 코딩 예시로 들어보겠습니다.
// var 중복선언 가능 예시
var a = 1
console.log(a) // 결과값 : 1
var a = 10
console.log(a) // 결과값 : 10
var a = 20
console.log(a) // 결과값 : 20
var로 선언한 변수가 또 중복 선언되는 경우 최신 값이 저장되는 것을 볼 수 있습니다.
하지만 let의 경우는 다릅니다.
아래를 보시면 변수가 중복된 경우 맨 아래의 console.log(a) 가 에러가 발생합니다.
// let 중복선언 불가능 예시
let a = 1
console.log(a) // 결과값 : 1
let a = 10
console.log(a) // 결과값 : SyntaxError : 'a' has already been declared
2. 스코프 범위
-. var : 함수 단위 스코프
-. let : 블록 단위 스코프
var로 선언한 변수는 함수 내부에서 유효합니다. 하지만 블록(if, for 등) 내부에서는 무시됩니다.
아래의 예시를 보겠습니다.
function test() {
if (true) {
var a = 10;
console.log(a); // 결과값 : 10
}
console.log(a); // 결과값 : 10 <-- 이 부분이 var와 let의 차이 입니다.
}
test() // 결과값 : 10
console.log(a) // 결과값 : 에러발생
let으로 선언한 변수는 함수 외부에서 유효하지 않습니다.
아래의 예시를 보겠습니다.
function.test() {
if (true) {
var a = 10;
console.log(a) // 결과값 : 10
}
console.log(a); // 결과값 : 에러발생 <-- 이 부분이 var와 let의 차이 입니다.
}
console.log(a); // 결과값 : 에러발생
3. 호이스팅 (Hoisting)
추가로 호이스팅의 개념에 대해서 알면 좋습니다.
호이스팅이란 함수 내부에 있는 선언들을 모두 끌어올려 해당 함수 유효 범위의 최상단에 선언하는 하는 것을 뜻합니다.
-. var : 호이스팅 발생함
-. let : 호이스팅 발생하지만, 다른 방식으로 작동됨
// var 변수 호이스팅
console.log(a); // undefined
var a = 5;
console.log(a); // 5
/*
foo(); // foo
function foo() {
console.log("foo");
}
// let 변수 호이스팅
console.log(a); // ReferenceError: a is not defined
let a = 5;
console.log(a); // 5
/* 함수 호이스팅 */
foo(); // error
var foo = function() {
console.log("foo");
}