자바스크립트

Section 11. 자바스크립트 var

포칼이 2023. 4. 7. 14:53

var는 let과 const가 생기기 전 변수 선언에 사용되던 문이다. 

각종 문제점들을 갖고 있어서 오늘날네는 사용하지 않을 것을 권장한다.

 

1. 선언 없이도 사용이 가능하다.

notDeclared = 1; // 미리 선언한 부분이 없을 시 var로 만들어짐
console.log(notDeclared); //1
// num이 var로 선언된 것
for (num of [1, 2, 3]) {
  console.log(num);
}
//1
//2
//3

 

2. 재선언이 가능하다.

그래서 코딩 중 실수의 여지가 된다.

let a = 1;
let a = 2; // ⚠️ 오류

const b = 1;
const b = 2; // ⚠️ 오류

var c = 1;
var c = 2;

 

3. 블록 레벨 스코프를 무시한다.

let num1 = 1;
{
  let num1 = 2;
  {
    let num1 = 3;
  }
}

console.log(num1); //1

var num2 = 1;
{
  var num2 = 2;
  {
    var num2 = 3;
  }
}

console.log(num2); //3

for문의 스코프도 무시한다.

// for문의 스코프도 무시
for (var i = 0; i < 5; i++) {
  var pow2 = i ** 2;
  console.log(pow2);
}

console.log(i, pow2);
//0
//1
//4
//9
//16
//5 16

함수의 스코프는 유효하다.

 

4. 호이스팅

console.log(hoisted1); // ⚠️ 오류

console.log(hoisted1); // 💡 오류발생 X, 대신 undefined 반환

var hoisted1 = 'Hello';

console.log(hoisted1) //Hello
console.log(hoisted2); // ⚠️ 오류

let hoisted2 = 'Hello';

console.log(hoisted2)

let일 경우를 살펴보자면 엄연히는 let도 호이스팅이 되지만 undefined로 초기화되지 않는 것이다.