티스토리 뷰

JavaScript

JavaScript 키워드

Dev.JH 2023. 4. 4. 09:57

1. var 키워드로 선언한 변수의 문제점

(1) 변수 중복 선언 허용

var 키워드로 선언한 변수를 중복 선언하면 초기화문 유무에 따라 다르게 동작한다. 초기화문이 있는 변수 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼, 초기화문이 없는 변수 선언문은 무시된다.

(2) 함수 레벨 스코프

var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 따라서 함수 외부에서 var 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 된다.

(3) 변수 호이스팅

var 키워드로 변수를 선언하면 변수 호이스팅이 발생한다. 이것은 에러를 발생시키지는 않으나 가독성을 떨어뜨리고 오류를 발생시킬 여지를 남긴다.

2. let 키워드

var 키워드와 다르게 변수를 중복 선언하면 문법에러가 발생한다. var 키워드는 오로지 함수의 코드 블록만을 지역 스코프로 인정하는 함수 레벨 스코프를 따르나 let 키워드로 선언한 변수는 모든 코드블록(함수, if문, for문, while문, try/catch문 등)을 지역스코프로 인정하는 블록 레벨 스코프를 따른다.

let 키워드로 선언한 변수는 변수 호이스팅이 발생하지 않는 것처럼 동작한다. let 키워드로 선언한 변수는 "선언 단계"와 "초기화 단계"가 분리되어 진행되기 때문이다. 하지만 변수 호이스팅이 발생한다. let foo = 1; // 전역 변수

{
    console.log(foo);  //ReferenceError
    let foo = 2; // 지역 변수
}

let 키워드로 선언한 변수의 경우 변수 호이스팅이 발생하지 않으면 위 예제에서 변수 foo의 값을 출력해야 하는데, 참조 에러가 발생하고 있다. 변수는 3단계에 걸쳐 생성된다. 1. 선언 단계 2. 초기화 단계 -> 초기화 단계 이전에 변수에 접근하려고 하면 Reference에러 발생 3. 할당 단계

그런데 let 키워드로 선언한 지역 변수 foo는 선언만 되고 초기화가 안되었기 때문에 참조 에러가 발생하는 것이다.

let 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다. -> 개념적인 블록내에 존재한다.

3. const 키워드

const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야한다. 재할당이 금지되어 있다. (재할당을 금지하지 불변을 의미하지는 않는다. 따라서 객체는 변경 가능) 이하 특징들은 let과 유사하다.

'JavaScript' 카테고리의 다른 글

[TypeScript] 새로운 JS의 키워드 using!  (1) 2023.09.24
[JavaScript] Map  (2) 2023.08.14
JavaScirpt 변수  (0) 2023.04.03
JavaScript 함수  (0) 2023.04.02
JavaScript 원시 값과 객체의 비교  (0) 2023.03.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31