var는 구식자바스크립트의 잔재다.
대부분의 경우 let으로 대체가 가능하나 다른방식으로 동작이 되기 때문에 무작정 바꿀 수는 없는 노릇이다.
여전히 var로 만들어진 많은 코드들이 있기에 var와 let,const와의 차이점에 대해 알아야 한다.
-- Var / let, const 차이 (var의 특성)
1. var는 블록스코프가 없다, 함수스코프 이거나 전역스코프이다. (let과 const는 블록스코프)
블록 기준으로 생기지 않기 때문에 블록 밖에서 접근이 가능하다.
// let이나 const로 선언시 Uncaught ReferenceError: test is not defined
if (true) {
var test = true; // 'let' 대신 'var'를 사용했습니다.
}
alert(test); // true(if 문이 끝났어도 변수에 여전히 접근할 수 있음)
// 함수 안에서 선언시 함수스코프로 인식이 된다.
function test(){
var say = "hello";
console.log(say);
}
test(); // hello
console.log(say); // Uncaught ReferenceError: say is not defined
for문에서의 var는 반복문이 끝나도 접근이 가능하다.
for(var i =0; i < 10; i++){
// 어떤 코드
}
console.log(i) // 10
// let이나 const로 선언시 Uncaught ReferenceError: i is not defined
2. var는 변수의 중복 선언을 허용한다. (정확히 말하면 재할당이 허용된다)
// 선언은 처음 한 번만 발생하며, 이후 같은 이름의 변수가 발견되면 값을 재할당한다.(변수의 값만 업데이트)
var test = "allow"; // 선언, 할당
var test = "yes"; // 재할당
alert(user); // John
// let, const로 할경우
// Uncaught SyntaxError: Identifier 'test' has already been declared
3. var는 변수를 선언하기 전에 사용할 수 있다.
// var : undefined, 호이스팅되어 undefined, 초기값으로 할당됨
console.log(test1);
var test1;
// let : Uncaught ReferenceError: test2 is not defined
console.log(test2)
let test2;
// const : 선언과 할당을 동시에 해야함, Uncaught SyntaxError: Missing initializer in const declaration
// 위 아래 순서 바꾸면 Uncaught ReferenceError: test4 is not defined
const test2= "something";
console.log(test2)
함수스코프에서의 var
function sayWhat() {
var test; // 선언은 함수 시작 시 처리됨, 밑에 써도 호이스팅됨.
alert(test); // undefined
phrase = "What"; // 할당은 실행 흐름이 해당 코드에 도달했을 때 처리됨.
}
sayWhat();
4. 브라우저에서 let이나 const가 아닌 var로 선언한 전역 함수나 전역 변수는 전역 객체의 프로퍼티 된다.
var test = 5;
alert(window.test); // 5 (var로 선언한 변수는 전역 객체 window의 프로퍼티가 됨)
// let, const로 할 경우 undefined 나옴
-- let과 const와의 차이점
1. 변수 재할당 가능 여부
- let: 선언된 변수를 나중에 다시 할당할 수 있습니다. 즉, 변수의 값을 변경할 수 있습니다.
- const: 선언된 변수에는 재할당이 허용되지 않습니다. 한 번 할당된 값은 변경할 수 없습니다.
// let
let test = "냐옹";
test = "미야옹";
console.log(test); // 미야옹
// const
const test = "냐옹";
test = "미냐옹"; // Uncaught TypeError: Assignment to constant variable.
2. 선언 시점에서의 초기화:
- let: 변수를 선언할 때 초기값을 지정하지 않아도 됩니다. 초기화하지 않은 변수는 undefined로 초기화됩니다.
- const: 변수를 선언할 때 반드시 초기값을 지정해야 합니다. 초기화되지 않은 const 변수는 SyntaxError를 발생시킵니다
// let
let test;
console.log(test) // undefined
test = "냐옹";
console.log(test); // 냐옹
// const : 선언과 할당을 동시에 해야함
// Uncaught SyntaxError: Missing initializer in const declaration
const test2;
test2 = "something";
console.log(test2)
'개발공부 > Javascript' 카테고리의 다른 글
#기본기5_비교연산자 (==와 ===, null과 undefined) (0) | 2024.04.02 |
---|---|
#기본기4_문자열과 숫자의 결합 (0) | 2024.04.02 |
#기본기2_"use strict" (0) | 2024.04.02 |
#기본기1_자바스크립트의 문자열 변환 (1) | 2024.04.02 |
자바스크립트의 this란 무엇인가 (0) | 2023.12.28 |