이 포스팅은 Javascript 기초 시리즈 7 편 중 3 번째 글 입니다.
목차
Hoisting
ES5 까지 적용되었던 변수의 선언부를 최상단으로 옮기는 것
예전에 자바스크립트에서는 변수를 선언하지 않은 상태에서 변수의 값을 할당하는 것이 가능했다.
a = 3;
var = a;
콘솔 창에 치면, a의 값이 선언되기 전에 출력되어서 나오는데 이것이 hoisting이라는 것이 적용된 탓에 그렇게 보이는 것이다. ES6에서는 let이라는 키워드를 사용하여 변수를 선언하기 전에는 변수에 값을 할당할 수 없다.
Scope에 구분 없이 변수가 할당된다.
ES5에는 정말 짜증(…)나는 것들이 많았는데 이런 것이다.
{
a = 4;
var a;
}
console.log(a);
이럴 경우 사실은 scope 범위 때문에 a는 출력될 수 없다. 하지만 ES5에서는 출력된다.(…) 어디에서나 아무 곳에서나 사용이 가능하다. ^^.. 이제 그만 써야해. 그래도 ES6를 사용하기 위해서는 브라우저 호환이 되는지 체크를 해야하는데 다행이 메이저 브라우져는 이를 다 지원한다. 아 응 IE넌 아니야
이런 부분을 깔끔히 하고 싶다면 Babel을 사용해서 높은 버전의 언어로 개발한 후에 이를 Transconpile하여 낮은 버전으로 지원하면 된다.
Constant
한번 할당하면 값이 변하지 않는다.
이건 잘 사용하면 너무 좋은데,
- 보안
- 스레드 관련해서 안전하다.
- 사람 실수를 줄여준다.
이러한 방향성은 다른 언어에서도 매우 강조되는 부분이다.
변수 타입
- 원시 자료형
- number
- boolean
- null
- undefined
- symbol
- 객체
- 함수
first-class function
이게 뭐지? 이 표현이 적혀 있으면, 함수도 다른 데이터 타입 처럼 변수에 할당이 가능하고, 그렇기 때문에 함수의 파라미터로 사용이 가능하고, 반환도 가능하다.
null
let a = null;
실제로 아무것도 들어가 있지 않다는 것을 명시하기 위한 데이터 타입이다.
undefined
let a;
아직 선언되어 있지 않은 상태를 말한다.
symbol
Dynamic Typing
런타임에 해당 변수의 타입이 결정된다.
사용하는 변수에 대해서 선언할 때, 어떠한 것인지 명시하는 것이 아니고, 런타임에 결정이 되어버린다. 이러한 경우 빠르게 프로토 타입을 개발할 때는 좋지만 규모가 있는 작업을 할 때에는 위험할 수 있다.
너무 추상적이어서 "8" / 2
이런 것들의 결과가 지맘대로라서 문제가 발생한다. 이거 너무 열받아서 TypeScript
가 나왔다!