var : 중복 선언 가능
var name = 'javascript';
console.log(name); // javascript
var name = 'react';
console.log(name); // react
let
, const
let : 중복 선언 불가능, 재할당 가능
let name = 'javascript';
console.log(name); // javascript
let name = 'react';
// Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'vue';
console.log(name); // vue
const : 중복 선언 불가능, 재할당 불가능
const name = 'javascript';
console.log(name); // javascript
const name = 'react';
// Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'vue';
console.log(name);
// Uncaught TypeError: Assignment to constant variable
function func() {
const list = ["A", "B", "C"];
list = "D";
console.log(list);
// TypeError: Assignment to constant variable
list.push("D");
console.log(list);
// ["A","B","C","D"]
}
최적의 사용 방법
const
를 기본으로 사용하되, 재할당이 필요한 경우let
사용
function func() {
if(true) {
var a = 5;
console.log(a); // 5
}
console.log(a); // 5
}
func(); // 5
console.log(a); // ReferenceError: a is not defined
지역 변수
전역 변수
function func() {
if(true) {
let a = 5;
console.log(a); // 5
}
console.log(a); // ReferenceError: a is not defined
}
console.log(a); // ReferenceError: a is not defined
(간단하게 미리 선언문을 실행한다고 이해)
// 변수 호이스팅
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// 함수 호이스팅
foo(); // foo
function foo() {
console.log("foo");
}
코드 실행 전에 자바스크립트 내부에서 미리 변수를 선언 -> undefined로 초기화, 함수도 동일
// 변수 호이스팅
console.log(a); // ReferenceError: a is not defined
let a = 5;
console.log(a); // 5
// 함수 호이스팅
foo(); // error
var foo() = function() {
console.log('foo');
}
자바스크립트 내부에서 코드 실행 전에 변수 선언만, 초기화는 X
초기화는 실행 과정에서 변수 선언문을 만났을 때 진행