게시글
질문&답변
2023.01.25
return 있고 없고 차이 질문드립니다...!
Return이 있는 경우 recur함수 내부 동작 (3번 순서까지 위와 동일 따라서 4번부터 진행)이후 return을 함으로써 recur 함수가 종료됨 **즉 콜스택이 비워져 있는 상태이며 이터레이터의 값이 모두 소비되지 않은 상태 이벤트 루프에 의해 콜스택이 비워져 있기 때문에 태스크큐에 있는 콜백 함수로 전달된 recur함수가 콜스택으로 옮겨져 실행됨 이때 then메서드로 전달된 콜백 함수의 인자 값은 resolve된 값 11이며 이 값이 recur함수 인자로 전달되며 재귀적으로 실행되면서 남아있는 이터레이터의 값을 소비 이후 while문을 루핑하며 결과값을 차례대로 합성하여 log에 출력
- 0
- 3
- 905
질문&답변
2023.01.25
return 있고 없고 차이 질문드립니다...!
* 편의를 위해 (n) => Promise.resolve(n + 10)함수는 a1 (n) => n + 100함수는 a2라고 칭하겠습니다.Return이 없는 경우 recur함수 내부 동작acc = f(acc ,a)에 의해 a1 함수의 호출로 Promise의 resolve함수가 호출되어 fulfilled상태(Promise {: 11})의 프로미스 값이 acc에 담김 acc는 Promise의 인스턴스 이므로 콜백으로 recur함수를 전달하는 acc.then함수 호출 이때 acc.then메서드가 호출 되면서 콜백함수를 태스크큐에 전달 이후 return이 없으므로 동기적으로 while문 루핑 루프에 의해 a2(acc) === a2(Promise {: 11}) 이기 때문에 a2함수 호출 결과값이 acc에 의도하지 않은 값([object Promise]100)이 담김; 이터레이터의 마지막 요소인 log(acc) 즉 log([object Promise]100) 호출 되어 출력 이후 태스크큐 -> 콜스택 으로 옮겨진 콜백함수가 실행되는 시점에는 상위스코프의 이터레이터의 값이 모두 소비 된 상태이기 때문에 while문을 실행하지 않고 recur함수 종료
- 0
- 3
- 905
고민있어요
2021.08.28 16:51
오탈자 관련
- 0
- 1
- 143