본문 바로가기
개발 공부 일지/JavaScript

자바스크립트 - 렉시컬 스코프, 클로져, 비동기함수

by yelimu 2024. 8. 7.
function orderFood(callback){
    setTimeout(()=> {
        const food="떡복이";
        callback(food);
    }, 3000);
}

function cooldownFood(food, callback){
    setTimeout(() => {
        const coolFood = `식은 ${food}`;
        callback(coolFood);
    }, 2000);
}


orderFood((food)=>{
    console.log(food);
    console.log("후 후 ~ ");
    cooldownFood(food, (coolFood) => {
        console.log(coolFood);
    })
})// orderFood를 호출하면 setTimeout 함수 실행. 3초 후에 매개변수로 받은 callback() 호출
// 함수 안에서 cooldownFoon함수 호출해서 setTime함수 실행. 2초뒤에 매개변수로 받은 food와 callback함수 실행

 

 

중첩된 함수 setTimeout은 파라미터를 받지 않아도, 바깥 함수로부터 food 를 전달받아 함수를 실행한다. 

= clousure = 함수가 선언될때 렉시컬 환경을 기억하여 그때의 변수를 참조한다. 

 

코드 자체는 비동기 함수에 대한 예제로, 

비동기함수의 결과값을 함수 바깥에서도 사용하려면

바깥함수를 호출할 때 그 결과값을 사용하려는 콜백함수를 아규먼트로 주면 된다. 

 

콜백지옥