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

+ Recent posts