DOM이벤트가 상위요소로 전파되는 현상
DOM에서 이벤트가 발생했을 때 거기에 등록된 이벤트 리스너 함수가 있으면 실행을 시도한다. 그리고 이벤트는 부모요소를 통해 DOM트리 위쪽으로 전파되며 거쳐가는 DOM요소마다 같은 일(이벤트 리스너 확인 및 실행)이 반복된다. 이 버블링은 최상위 요소인 document까지 진행된다.
== 추상적인 등가 연산자,===엄격한 등가 연산자다.
==는 loose equality연산자라고도 한다.
1 == "1"; // true
1 == [1]; // true
1 == true; // true
0 == ""; // true
0 == "0"; // true
0 == false; // true
==는 사용하지 말아야 한다. 예외가 있다면 null과 undefined를 비교할 때는 편리한 측면도 있다.
전통적으로 웹사이트는 브라우저를 통해 서버에서 HTML을 받아서 렌더링하는 방식이었다. 사용자가 다른 URL로 이동하면 페이지 전체가 새로고침되고 서버가 이동할 URL에 맞는 새 HTML을 전달해준다. 이것을 서버사이드렌더링
이라고 부른다.
그러나, 최신의 SPA에서는 클라이언트 사이드 렌더링을 사용한다. 브라우저는 초기 페이지와 함께 앱에 필요한 스크립트,스타일시트를 내려받는다. 사용자가 다른 페이지로 이동하면 페이지 새로고침은 발생하지 않는다. SPA는 초기 로딩 때 가져온 자바스크립트를 사용해 데이터와 페이지를 동적으로 업데이트 한다.
장점
단점
비동기를 더 쉽게 구현할 수 있는 것이 장점이다.
장점
.then()
을 사용해서 순차적인 비동기 작업을 가독성있게 작성할 수 있다.Promise.all
을 사용해서 병렬로 실행되는 비동기 작업을 쉽게 작성할 수 있다.
- 콜백을 너무 빨리 실행 2.콜백 너무 늦게 실행하거나 실행하지 않음 3. 콜백을 너무 적게 또는 너무 많이 실행4.필요한 환경변수/파라미터의 전달 실패 5.확인해야 하는 에러,예외가 숨어버린다.
단점
객체: for-in + hasOwnProperty, Object.keys 배열:for,forEach,for-of
1) 객체
for(var property in obj){console.log(property);}
obj.hasOwnproperty(property)
를 사용해서 검사해야 한다.2)배열
arr.forEach(function (el,index){...})
for(let elem of arr){...}
이미 선언된 값의 수정 가능, 불가능 여부
불변성은 함수형 프로그래밍에서 핵심 개념이다. 가변(mutable)객체는 만들어진 후에 그 값이 변경될 수 있는 객체다. 불변(immutable)객체는 만들어진 후에 변경될 수 없다.
불변객체의 예) 자바스크립트에서 몇몇 내장 타입(숫자,문자열)은 불변이다.하지만 커스텀 객체는 일반적으로 가변적이다. 불변객체로는 Math,Date가 있다.
코드의 순차적인 실행 vs 콜백에 전달된 코드를 나중에 실행
동기함수는 앞에 있는 코드의 실행이 완료되어야 다음으로 넘어간다. 실행 순서가 보장되지만,어떤 코드의 실행시간이 길어진다면 프로그램이 멈춘 것처럼 보이게 될 것이다.
비동기 함수는 보통 콜백함수를 파라미터로 받고 실행 즉시 다음라인에 있는 코드로 넘어간다. 콜백은 비동기 작업이 완료되고 콜 스택이 비었을 때 실행된다.웹 서버로부터 데이터를 불러오는 등의 무거운 작업은 비동기적으로 실행되어야 한다.
동기 함수는 스택에 즉시 추가, 비동기 콜백은 태스크 큐에 대기하고 있다가 이벤트 루프가 스택에 추가
이벤트 루프는 싱글 스레드 루프로 콜 스택을 모니터링하면서 태스크 큐에 실행해야할 작업이 있는지 확인한다. 만약 콜 스택이 비어있고 태스크 큐에 콜백함수가 있다면, 함수는 큐에서 제거되고 실행을 위해 콜스택에 추가된다.
console.log같은 동기 함수는 스택에 바로 들어가 실행된다. 하지만 비동기 web api인 setTimeout은 스택에 들어간 후 바로 지워지고 대신 웹브라우저에서 타이머를 실행시킨다. 타이머가 끝나면 콜백을 태스크 큐에 추가하고, 모니터링하고 있던 이벤트 루프가 콜백을 스택에 추가해서 실행한다. 콜백 안에 비동기 함수가 있다면 비슷한 과정이 반복될 것이다.
태스크 큐 (TASK Queue)
태스크 큐는 생성된 태스크가 적재되는 큐이다.
태스크 큐는 javascript 실행환경인 브라우저에 위치한다.
태스크는 web API를 사용하는 경우 생성된다(Window,Document,Event,Fetch)
일종의 대기열과 같은 개념. setTimeout,setInterval,setImmediate등과 같은 비동기 처리나 이벤트리스너의 콜백과 같은 처리는 태스크 큐로 들어간다.
콜스택(Call stack)
실행컨텍스트가 적재되는 스택
콜 스택은 자바스크립트 엔진에 위치한다.
작동되는 순서에 따라 차례대로 콜 스택에 들어가고, 값을 반환하면 콜 스택에서 지워진다. 자바스크립트는 싱글 스레드를 기반으로 하기에 단 한줄의 콜 스택만 존재한다.