문
(문과 표현식을 확실히 이해하는 것이 중요하다. )
- 문 (명령문) : 프로그램을 구성하는 기본 단위이자 최소 실행 단위
- 토큰 : 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
- 문은 선언문, 할당문, 조건문, 반복문 4가지로 구분
function foo() {} // 함수 선언문
var x; // 변수 선언문
x = 5; // 할당문
if (x>1) { console.log(x) } // 조건문
for (var i=0; i<2; i++) { console.log(i); } // 반복문
표현식인 문과 표현식이 아닌 문
- 표현식인 문 : 변수에 할당 가능
- 표현식이 아닌 문 : 변수에 할당 불가 (값으로 평가할 수 없음)
// 변수 선언문은 표현식이 아니다.
var x;
// 1, 2, 1+2, x=1+2 모두 표현식이다. 할당문도 표현식이다.
x = 1 + 2;
// (충격) 할당문은 표현식이므로 값처럼 사용할 수 있다.
var foo = x = 1 + 2; // undefined
// 표현식이 아니므로 값처럼 사용할 수 없다.
var foo = var x;
var foo = x = 1 + 2;
라는 정말 해괴망측한 표현이 오류를 일으키지 않는다는 사실이 정말 충격적이다..!
undefined 타입
var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다. 다시 말해, 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태(대부분 쓰레기 값이 들어있다.)로 내버려 두지 않고 자바스크립트 엔진이 undefined로 초기화한다. 따라서 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.
var foo;
console.log(foo) // undefined
undefined는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다. 변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않은 변수라는 것을 간파할 수 있다.
따라서 개발자가 변수에 undefined를 할당하는 것은 본래 취지와 어긋날뿐더러 혼란을 줄 수 있으므로 권장하지 않는다.
값이 없다는 것을 명시하고 싶다면 null을 할당하자!
JS의 선언과 정의
자바스크립트는 다른 언어와 달리 선언과 정의의 개념이 모호하다. JS는 선언하면 암묵적으로 정의가 이뤄지기 때무에 선언과 정의의 구분이 모호하다. ECMAScript 사양에서 변수는 ‘선언한다’라고 표현하고, 함수는 ‘정의한다’라고 표현한다.
'Study > JavaScript' 카테고리의 다른 글
어쩌면, 당신도 비동기 처리를 모르고 있다. (0) | 2024.04.07 |
---|---|
이젠 공부해야겠지...? "this" (0) | 2024.03.19 |
모던 자바스크립트 Deep Dive 스크랩 (1) (1) | 2023.12.19 |