var 키워드는 중복선언 o 재할당 o 이다
var 키워드는 함수 레벨 스코프 이다
함수레벨 스코프는 전역변수를 남발할 가능성이 높다
호이스팅에 의해서 에러를 발생하진는 않지만 가독성을 떨어뜨리고 오류를 발생시킬수있다
var 키워드는 런타임이전에 '선언단계' 와 '초기화단계'가 한꺼번에 진행
var foo = 123; //전역변수
console.log(foo) // 123
{
var foo = 456;
}
console.log(foo); // 456
var는 함수레벨스코프 이기때문에 블록 내부의 foo는 전역변수이다
var는 중복선언이가능함으로 문제가없다
블록내의 변수 foo는 전역변수이기때문에 재할당하여
456이라는 값으로 덮어씌어진다
let 키워드는 중복선언 x 재할당 o 이다
let 키워드는 블록 레벨 스코프이다
let 키워드는 호이스팅이 발생하지 않는것처럼 동작한다 -> 실제로는 동작하는것임
let 키워드는 '선언단계'와 '초기화단계' 가 분리되어 진행
let foo = 123; // 전역 변수
{
let foo = 456; // 지역 변수
let bar = 456; // 지역 변수
}
console.log(foo); // 123
console.log(bar); // ReferenceError: bar is not defined
foo와 bar 은 지역변수이다
전역 foo 와 지역 foo 는 별개의 다른 변수이다
bar 변수도 지역변수이다 따라서 전역에서 bar을 참조할수 없다 -> 함수도 코드블록이기 때문에 스코프를 만든다
var 변수는 범위가 function
var i 들어있는 포스트잇은 for 바깥에 생성.
let 변수는 범위가 { }
let i 들어있는 포스트잇은 for 안쪽에 3개 생성.
그리고 컴퓨터는 변수가져다쓸 때 가까운거 가져다 쓰려고함.
const 키워드는 중복선언 x 재할당 x 이다
const 키워드는 블록 레벨 스코프이다
const 키워드는 호이스팅이 발생하지 않는것처럼 동작한다 -> 실제로는 동작하는것임
const 키워드는 상수를 선언하기 위해 사용한다
coons 키워드는 반드시 선언과 동시에 초기화해야한다
const person = {
name : 'LIM'
}
person.name = "park";
console.log(person) // {name : "park"}
const 키워드로 선언된 변수에 객체를 할당한 경우 값을 변경할수 있다
const 키워드는 재할당을 금지할뿐 "불변"을 의미하지않는다