var tester = "hey hi"; function newFunction() { var hello = "hello"; } console.log(hello); // error: hello is not defined
호이스팅이란 변수와 함수 선언이 맨위로 이동되는 자바스크립트 매커니즘이다.
console.log (greeter); var greeter = "say hello"
// 호이스팅이 된 예시 var greeter; console.log(greeter); // greeter is undefined greeter = "say hello"
var변수는 범위 내에서 맨 위로 올려지고, 값은 undefined(정의되지 않음)으로 초기화됩니다.
이같은 문제 때문에 let과 const가 필요하게 됨.
let greeting = "say Hi"; let times = 4; if (times > 3) { let hello = "say Hello instead"; console.log(hello);// "say Hello instead" } console.log(hello) // hello is not defined
- let은 블록 범위이기에 범위 밖에서는 확인이 불가능하다.
let greeting = "say Hi"; let greeting = "say Hello instead"; // error: Identifier 'greeting' has already been declared
//그러나 동일한 변수가 다른 범위 내에서 정의된다면, 에러는 더 이상 발생하지 않습니다. let greeting = "say Hi"; if (true) { let greeting = "say Hello instead"; console.log(greeting); // "say Hello instead" } console.log(greeting); // "say Hi"
let도 var처럼 호이스팅이 되지만 선언 이전에 let변수를 사용하려고
시도한다면 Reference Error(참조 오류)가 발생한다.
let 선언처럼 const 선언도 선언된 블록 범위 내에서만 접근 가능
const로 선언된 변수의 값이 해당 범위 내에서 동일하게 유지됨을 의미한다.
업데이트하거나 다시 선언할 수가 없다.
const greeting = "say Hi"; greeting = "say Hello instead";// error: Assignment to constant variable.
const greeting = "say Hi"; const greeting = "say Hello instead";// error: Identifier 'greeting' has already been declared // 따라서 모든 const 선언은 선언하는 당시에 초기화되어야 합니다.
let과 마찬가지로 const 선언도 맨 위로 끌어올려지지만, 초기화되지는 않는다.