자바스크립트만의 특징 몇가지 (ft. 호이스팅) + 예시 퀴즈
1. 인터프리터 언어이다.
자바 → 바이트코드 처럼, C → 실행파일 처럼 컴파일 과정을 거치는 컴파일 언어와 다르다.
자바스크립트 Parser가 코드들을 파싱하면서 해석하고 실행시킨다.
각 브라우저마다 자신의 엔진이 있는데 (ex. 크롬 V8)
각자가 해석하는 결과물의 특징이 조금씩 다르다. 그래서 빡친다.
2. 함수 기반 언어이다.
자바는 클래스의 개념이 없다. 함수를 사용해서 유사하게 구현할 수 있다.
3. true, false 개념이 특별하다.
NaN, 0, ''(빈 문자열), undefined, null, false 이 6가지를 제외한 모든 것들이 true이다.
"고군분투", 1234 등등 모든 것이 true이다.
+Q. '0' 은 true일까 false일까??
정답은 true이다. 빈 문자열이 아니라서!
+Q. console.log( 0 && 1 ) ; 의 반환값은?
정답은 0 이다. 나는 false인줄 알았는데, 있는 그대로의 false형태( 숫자 0 )를 반환한다.
여기서 예시로 나온 &&, || 를 조금 다음에 조금 더 구체적으로 다룰 것이다.
4. 실행하면 "호이스팅"을 진행한다.
사전적 의미는 이렇다. 호이스팅, 호잇쨔 올라가보즈아! 영단어 그대로 느낌이 온다.
자바스크립트는 실행을 누르면,
자바스크립트 Parser는 { var, function 선언문 } 이 두가지를 가장 위로 끌어올린다.
(해석을 가장 먼저 한다는 것이지, 당연히 코드를 맨위로 자리이동시킨다는 것은 아니다!)
예시를 하나 들겠다 :
func() ;
var func = function () {
console.log(1) ;
} ;
func() ;
function func() {
console.log(2) ;
}
func() ;
출력 값은 어떻게 될까?
정답 :
2
1
1
꽤나 뜻밖이지 않은가????
호이스팅이 진행된 후 순서를 알면 알 수 있다.
호이스팅 순서는 그렇다면 어떻게 될까? 이 것도 많이들 틀릴 것이다 후후..
정답 :
var func ;
function func() { console.log(2) ; }
func() ; // 2
func = function () { console.log(1) ; } ;
func() ; // 1
func() ; // 1
그래서 순서가 2 1 1 이 되는 것이다.
나도 예측이 다 틀려서 자바스크립트 그래도 1년정도 개발한 사람으로써 매우매우 부끄러웠다.