[독서] '코어 자바스크립트' 를 읽고

KoEunseo·2023년 5월 25일
0

book

목록 보기
1/1

최근 코어 자바스크립트(일명 호랑이책)을 읽었다. 개발서적을 읽는 데 겁이 좀 나서 최근에야 다 읽어보게 되었는데, 결론적으로 너무 좋았고 재미있었다. 그리고 처음 공부했을때보다 정보를 받아들이는 데 더 수월해진 것을 느꼈다. 저자가 쉽게 써주셔서 그런 것도 있겠지만, 제대로 입문 한 것 같다. 잘 하는 선배한테 과외받은 느낌. 강추다. 다른 유명한 책들도 읽어보고 싶어졌다.

여튼 그래서 조만간 면접도 있겠다 정리를 좀 해볼까 한다.


|01| 데이터 타입

01 원시형(number, boolean, null, undefined, Symbol)과 참조형(object, Array, Function, Date, RegExp)이 있다.

  • 심볼은 유일성이 보장되는 데이터 타입이라고 한다.

원시형은 값이 담긴 주솟값을 바로 복제한다. 원시형이 '불변'인 이유는, 값은 불변하고 값이 담긴 주솟값이 변하는 것일 뿐이기 때문이다.
참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다. 객체의 변수(프로퍼티) 영역이 별도로 존재한다. 이 변수 영역에는 다른 값을 얼마든 대입할 수 있다.

05 불변 객체

참조형 데이터의 '가변'은 데이터 자체가 아니라 내부 프로퍼티를 변경할 때 성립한다. 데이터 자체는 변경되지 않는 것. 객체에 변화를 줄 때마다 객체를 복사해서 사용해 원본 객체를 보호할 수 있다. 이때 얕은 복사깊은 복사라는 개념이 나온다.
얕은 복사는 주소값만 복사하고, 깊은 복사는 내부 프로퍼티까지 복사한다. 만일 얕은복사를 했다면 사본이 바뀌었을 때 원본에도 영향이 갈 수밖에 없다.
어떤 객체를 복사할 때 객체의 프로퍼티 중 그 값이 원시형이라면 그대로 복사해도 되지만 참조형이라면 깊은복사를 해야한다.

06 undefined와 null

undefined는 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하기도 한다.

  • 값을 대입하지 않은 변수에 접근할 때, 존재하지 않는 프로퍼티에 접근하려고 할때, return문이 없거나 호출되지 않는 함수의 실행 결과

'비어있는 요소'와 undefined로 할당된 요소는 다르다. undefined는 의미를 떠나 그 자체로 '값'이다. 자바스크립트 엔진이 부여하는 undefined와 구별하기 위해 undefined보다 null을 사용하면 된다. 그럴때 비로소 값을 대입하지 않은 변수에 접근하려 할 때 자바스크립트 엔진이 반환해주는 값으로서의 undefined가 될 수 있다.

  • typeof null 은 object라는 것을 주의하자.

|02| 실행 컨텍스트

코드가 실행되는 데 필요한 환경정보들을 모아놓은 객체이다. 실행 컨텍스트는 전역 컨텍스트, 함수 실행에 의한 컨텍스트가 있다. 실행 컨테스트가 활성화되는 시점에 변수를 끌어올리고(호이스팅) 외부 환경 정보를 구성하고 this값을 설정한다. 컨텍스트를 구성하고 콜스택에 쌓아올렸다가 순차적으로 실행된다.

호이스팅
실행 컨텍스트가 관여하는 코드 집단의 최상단으로 '끌어올린다'. 이때 선언부만을 호이스팅하고 할당부는 원래 자리에 남아있다.


함수 선언문과 함수 표현식
함수 선언문은 전체를 호이스팅하고 함수 표현식은 선언부만 호이스팅된다. 때문에 함수 선언문은 선언 전에 호출해도 실행된다.


스코프
식별자(변수)에 대한 유효범위. 호출된 함수가 선언될 당시의 LexicalEnvironment를 참조해 안에서 바깥으로 차례로 검색해 나간다(스코프체인).


|03| this

함수가 호출되어 실행 컨텍스트가 생성될 때 결정된다.
전역 공간에서 this는 전역객체를 의미한다.
어떤 함수를 메서드로서 호출한 경우에 this는 메서드 호출 주체를 참조한다.
어떤 함수를 함수로서 호출한 경우 this는 전역객체를 참조한다.
콜백함수 내부에서의 this는 콜백함수의 제어권을 가진 함수가 정의한 바에 따르고, 정의하지 않은 경우 전역객체를 참조한다.
생성자 함수에서의 this는 생성될 인스턴스를 참조한다.

this 바인딩
call, apply 메서드는 this를 명시적으로 지정하면서 함수를 호출한다.
bind 메서드는 this 및 함수에 넘길 인수를 일부 지정해 새로운 함수를 만든다.

|05| 클로저

어떤 함수에서 선언한 변수를 참조하는 내부함수를 외부로 전달할 경우 실행컨텍스트가 종료된 뒤에도 해당 변수가 가비지컬렉팅 되지 않는 현상이다. 함수를 return 하거나 콜백으로 전달하는 방법이 있다.

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글