var 키워드로 선언한 변수의 문제점
1. 변수의 중복 선언 허용
var 키워드로 선언된 변수는 선언 단계와 초기화 단계가 동시에 이뤄진다.
var x = 1;
var y = 1;
// var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용한다.
var x = 100;
//초기화문이 없는 변수 선언문은 무시된다.
var y;
console.log(x); // 100
console.log(y); // 1
2. 함수 레벨 스코프
var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다.
var z = 1;
if(true){
var z = 10;
};
console.log(z); // 10
3. 변수 호이스팅
호이스팅에 의해 변수 선언문 이전에 참조할 수 있다.
console.log(foo); // undefined
foo = 123;
console.log(foo); //123
var foo;
let
선언 단계와 초기화 단계의 진행이 따로 이뤄지고 초기화 이전에 접근할 시 참조 에러가 발생한다.
1. 변수 중복 선언 금지
let이나 const 선언된 변수는 같은 스코프 내에서 중복 선언을 허용하지 않는다.
let k = 10;
let k = 100; //Identifier 'k' has already been declared
2. 블록 레벨 스코프
let키워드로 선언한 변수는 모든 코드 블록을 지역 스코프로 인정하는 블록 레벨 스코프를 따른다.
let zoo = 1; //전역
{
let zoo = 10; //지역
let boo = 100; //지역
};
console.log(1);
console.log(boo); //ReferenceError: boo is not defined
const
const 키워드는 상수를 선언하기 위해 사용한다.
const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야 한다.
const c2; //Missing initializer in const declaration
상수란? 재할당이 금지된 변수를 말한다.
c3 = 100; //Assignment to constant variable.
※ const 키워드와 객체
const 키워드로 선언된 변수에 원시 값을 할당한 경우 값을 변경할 수 없지만, 객체를 할당한 경우 값을 변경할 수 있다.
재할당만 금지할 뿐 불변을 의미하지 않는다.
객체가 변경되더라도 변수에 할당된 참조 값을 변경되지 않는다.
const person = {
name: "kiwon"
};
console.log(person.name); //kiwon
person.name = "happy";
console.log(person.name); //happy
'WEB > JS' 카테고리의 다른 글
[JS] 생성자 함수에 의한 객체 생성 (0) | 2023.11.28 |
---|---|
[JS] 프로퍼티 어트리뷰트 (0) | 2023.11.27 |
[JS] scope(유효범위) (0) | 2023.11.25 |
[JS] recursive // callback (2) | 2023.11.25 |
[JS] 함수 (1) | 2023.11.25 |