화살표함수의 this는 일반함수의 this와 다르게 동작한다.
이는 "콜백 함수 내부의 this문제", 즉 콜백 함수의 내부의 this가 외부 함수의 this와 다르기 때문에 발생하는 문제를 해결하기 위해 의도적으로 설계된 것이다.
class Prefixer {
constructor(prefix) {
this.prefix = prefix;
}
add(arr) {
return arr.map(item => this.prefix + item);
}
}
const prefixer = new Prefixer("Good ");
arr = ["boy","girl"];
console.log(prefixer.add(arr)); // [ "Good boy", "Good girl" ]
화살표 함수는 함수 자체의 this바인딩을 갖지 않는다. 따라서 화살표 함수 내부에서 this를 참조하면, 상위 스코프의 this를 그대로 참조한다. 이를 lexical this라고 한다. 이는 마치 렉시컬 스코프와 같이 화살표 함수의 this가 함수가 정의된 위치에 의해 결정된다는 것을 의미한다.
Rest 파라미터는 이름 그대로 나머지 매개변수를 의미한다.
매개변수 이름 앞에 ...을 붙여서 정의한다.
화살표함수는 함수 자체의 arguments 객체를 갖지 않으므로, 화살표 함수로 가변 인자 함수를 구현해야 할 때는, 반드시 Rest파라미터를 사용해야 한다.
let foo = {
printEach: (...rest) => {
rest.forEach(e => console.log(e))
}
}
foo.printEach([1, 2, 3, 4, 5]);
브라우저는 다음과 같은 과정을 거쳐 렌더링을 수행한다.
1. 브라우저는 HTML,CSS,자바스크립트,이미지,폰트 파일 등 렌더링에 필요한 리소스를 요청하고 서버로부터 응답을 받는다.
2. 브라우저의 렌더링 엔진은 서버로부터 응답된 HTML과 CSS를 파싱하여 DOM과 CSSOM을 생성하고, 이들을 결합하여 렌더 트리를 생성한다.
3. 브라우저의 자바스크립트 엔진은 서버로부터 응답된 자바스크립트를 파싱하여 AST를 생성하고, 바이트코드로 변환하여 실행한다. 이때 자바스크립트는 DOM API를 통해 DOM이나 CSSOM을 변경할 수 있다. 변경된 DOM과 CSSOM은 다시 렌더 트리로 결합된다.
4. 렌더 트리를 기반으로 HTML요소의 레이아웃(위치와 크기)을 계산하고 브라우저 화면에 HTML요소를 페인팅한다.
DOM : HTML문서를 파싱한 결과물.
CSSOM : CSS 문서를 파싱한 결과물.
렌더 트리: DOM과 CSSOM을 결합하여 브라우저 화면에 렌더링되는 노드만으로 구성된 트리구조의 자료구조.
DOM은 HTML문서의 계층적 구조와 정보를 표현하며, 이를 제어할 수 있는 API, 즉 프로퍼티와 메소드를 제공하는 트리 자료구조이다.
DOM은 노드 객체의 계층적인 구조로 구성된다. 노드 객체는 조류가 있고 상속 구조를 갖는다. 노드 객체는 총 12개의 종류가 있다. 이 중에서 중요한 노드 타입은 다음과 같이 4가지다.
HTML의 구조나 내용 또는 스타일을 동적으로 조작하려면 먼저 요소 노드를 취득해야 한다. 요소 노드의 취득은 HTML 요소를 조작하는 시작점이다.(텍스트 노드는 요소 노드의 자식 노드, 어트리뷰트 노드는 요소노드의 형제 노드이기 때문)