본문 바로가기
IT/javascript

[JS] var 에 대해서 그리고 hoisting 까지

by 내일은교양왕 2024. 9. 12.

var

변수 선언할 때 사용

새로운 코드를 작성할 땐 사용하면 안됨

 - let 또는 const만 사용

 - 이유는 블록 scope가 없기 때문 (**매우 중요)

 - 그래서 var로 작성된걸 let 또는 const로 변경하는 작업을 한다면 스코프에 유의해야한다.

블록 scope가 아닌 함수 수준 scope를 갖는다.

var 선언은 함수가 시작되는 시점에 처리 된다.

scope 무시되는 예제

예제 1) if statement scope가 무시됨

if (true) {
  var test = true;
}

alert(test); // alert의 값이 true로 찍힘

 

예제 2) for loop에서도 scope이 무시됨

for (var i = 0; i < 10; i++) {
  // ...
}

alert(i); // 10이 찍힘;; 무섭네..

 

예제 3) 함수 안의 scope 무시됨

function sayHi() {
  if (true) {
    var phrase = "Hello";
  }

  alert(phrase); // Hello 출력
}

sayHi();
alert(phrase); // phrase is not defined

 

변수를 중복 선언 가능

예제 1)

var user = "Peter";
var user = "Denny"; // 이 "var"는 아무것도 하지 않습니다(이전에 이미 선언됨).

alert(user); // Denny

 

선언하기 전 사용할 수 있는 var

예제 1)

var 선언은 함수가 시작될 때 처리됨. 전역에서 선언한 변수라면 스크립트가 시작될 때 처리

아래의 예제는 함수 본문 내에 var로 선언한 변수는 선언 위치와 상관없이 함수 본문이 시작되는 지점에서 정의된다.

function sayHi() {
  phrase = "Hello";

  alert(phrase);

  var phrase;
}
sayHi(); // Hello 출력

 

아래처럼 동작된다.

function sayHi() {
  var phrase;

  phrase = "Hello";

  alert(phrase);
}
sayHi();

 

변수가 끌어올려 지는 현상을 호이스팅(hoisting) 이라고 불린다.

var로 선언한 모든 변수는 함수의 최상위로 끌어올려진다.

 

 

 

 

https://ko.javascript.info/var

 

오래된 var

 

ko.javascript.info