우리가 너에게 준 함수를 나중에 부를때 전달해줘
호이스팅?
- var, 함수 선언들이 자동적으로 제일 위로 올라가는 것
console.log("1");
setTimeout(() => console.log("2"), 1000);
console.log("3");
1) 순서대로 실행 → '1' 출력
2) setTimeout은 웹 API, 브라우저의 요청을 보냄
3) '3' 출력
4) 브라우저: 1초 지났으니 '2' 출력할게!
1) 동기(Synchronous)
2) 비동기(Asynchronous)
console.log("1");
setTimeout(function () {
console.log("2");
}, 1000);
console.log("3");
// 동기적 콜백
function printRightNow(print) {
print();
}
printRightNow(() => console.log("hello"));
자바스크립트 엔진이 이 코드를 해석한다면?
// 함수 선언 호이스팅
function printRightNow(print) {
print();
}
console.log("1");
setTimeout(function () {
console.log("2");
}, 1000);
console.log("3");
printRightNow(() => console.log("hello"));
1) 호이스팅으로 인해 printRightNow 함수 선언부가 위로 올라간다.
2) 동기적으로 실행한다.
함수선언
→ '1'출력
→ setTimeout 브라우저에 요청
→ '3'출력
→ 함수 실행 'hello' 출력
동기적으로 실행이 끝난 후
→ 1초 뒤 setTimeout '2' 출력
console.log("1");
setTimeout(function () {
console.log("2");
}, 1000);
console.log("3");
// 동기적 콜백
function printRightNow(print) {
print();
}
printRightNow(() => console.log("hello"));
// 비동기적 콜백
function printLately(print, timeout) {
setTimeout(print, timeout);
}
printLately(() => console.log("async"), 2000);
자바스크립트 엔진이 이 코드를 해석한다면?
// 함수선언 호이스팅
function printRightNow(print) {
print();
}
function printLately(print, timeout) {
setTimeout(print, timeout);
}
console.log("1");
setTimeout(function () {
console.log("2");
}, 1000);
console.log("3");
printRightNow(() => console.log("hello"));
printLately(() => console.log("async"), 2000);
1) 함수 선언부들이 호이스팅 된다.
2) 동기적으로 실행한다.
첫번째 함수선언
→ 두번째 함수선언
→ 두번째 함수의 setTimeout 브라우저에 요청
→ '1'출력
→ setTimeout 브라우저에 요청
→ '3'출력
동기적으로 실행이 끝난 후
→ 함수 실행
→ 'hello' 출력
→ 1초 뒤 setTimeout '2' 출력
→ 2초 뒤 setTimeout 'async' 출력
참고자료
https://youtu.be/s1vpVCrT8f4?si=Vpw7Nen_gVyJ_DKj
스파르타코딩클럽 Node.js 강의