: 하나의 작업이 끝날 때까지, 이어지는 작업을 "막는 것"을 blocking 이라 부른다.
: 시작 시점과 완료 시점이 같은 상황을 "동기적(synchronous)이다."라고 한다.
: 개발자들은 Node.js를 non-blocking하고 비동기적(asynchronous)으로 작동하는 런타임으로 개발
: 비동기 흐름은 callback, promise, async/await 중 하나의 문법을 이용하여 구현할 수 있다.
caller
함수는, 함수 내부에서 이 콜백 함수를 호출(invoke) 할 수 있다.caller
는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있다, 아예 호출하지 않을 수도 있고, 여러번 실행할 수도 있다.function B() {
console.log('called at the back!');
}
function A(callback) {
callback(); // callback === B
}
A(B);
[1, 2, 3].map(function(element, index) {
return element * element;
});
// 배열의 길이만큼 총 3번 반복된다.
document.querySelector('#btn').addEventLustener('click', function(e) {
console.log('button clicked');
});
// dom에서 사용하였던 event handler를 통한 반복
function handleClick() {
console.log('button clicked');
};
✅ document.querySelector('#btn').onclick = handleClick;
// 레퍼런스로 handleClick을 주었다.
✅document.querySelector('#btn').onclick = function() {
handleClick();
}
// 새로운 익명 함수를 만들고 그 안에서 handleClick을 실행
✅document.querySelector('#btn').onclick = handleClick.bind();
// 함수 메소드(bind)는 함수 그 자체를 리턴한다.
🚫document.querySelector('#btn').onclick = handleClick();
// 함수 실행을 하고 있으므로 리턴이 없기 때문에 undefined가 된다.
전화 | 문자 |
---|---|
하던 일을 멈추고 받아야 한다(blocking) | 확인 후, 나중에 답장할 수 있다(non-blocking) |
요청에 대한 결과가 동시에 일어난다(synchronous) | 요청에 대한 결과가 동시에 일어나지 않는다(asynchronous) |