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년정도 개발한 사람으로써 매우매우 부끄러웠다.
자바스크립트... 좋은 놈인줄 알았는데...
꽤나 괘팍한 놈이었다...
많은 공부를 필요로 하는 놈이구나 ㅠ
'개발 > javascript' 카테고리의 다른 글
React Array Toggle Element (리액트 배열 값 토글하기!) (0) | 2021.07.16 |
---|---|
React useState() Object 내부 값 변경 (0) | 2021.07.05 |
[Javascript] 당신의 머리를 터지게 만들 Instanceof (0) | 2020.12.17 |
[Javascript] instance of, arguments, callee, this, new (0) | 2020.12.16 |
꼭 알아야 할 자바스크립트 성능 최적화를 위한 몇가지 꿀팁 (0) | 2020.12.03 |