inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

코어 자바스크립트 예제 5-14 질문

해결됨

모던 자바스크립트 딥다이브 스터디

안녕하세요. 모던 자바스크립트를 읽다가 책이 빠르게 굵직한 부분을 훑고 싶어 강사님의 저서 '코어 자바스크립트'를 읽던 중 질문이 생겨 질문드립니다. 먼저 강의에 관련된 질문이 아닌 점 죄송합니다. 클로저, 135쪽, 예제 5-14, 부분 적용 함수 구현(1) const partial = function () { // 01 const originalPartialArgs = arguments ; // 02 const func = originalPartialArgs [ 0 ]; if ( typeof func !== "function" ) { throw new Error ( "It's not a function." ); } return function () { // 07 console . log ( arguments ); const partialArgs = Array . prototype . slice . call ( originalPartialArgs , 1 ); const restArgs = Array . prototype . slice . call ( arguments ); // 09 return func . apply ( this , partialArgs . concat ( restArgs )); }; }; 1. 9번째 줄의 arguments는 7번째 줄에서 return되는 익명함수의 렉시컬 환경에서 새로 생성된 argument이기 때문에 partial함수의 렉시컬 환경의 arguments(2번째 줄)과 다르다. 2. 7번째 줄에서 익명함수 선언 시 9번째 줄의 arguments는 익명함수의 렉시컬 환경에 수집되어 빈 객체 상태로 익명함수가 return된다.(실행 컨텍스트가 활성화 된느 시점이 아닌 선언 시점에 정보가 수집된다.) 3. 후에 21번째 줄에서 익명함수를 할당받은 addPartial 함수가 22번째 줄에서 호출 될때 7번째 줄의 arguments가 arguments object [6,7,8,9,10]로 재할당 된다. 4. 8번째 줄의 originalPartialArgs가 클로저를 이용한 것이다. 처음에 7번째 줄의 익명함수 속 arguments가 상위 스코프의 arguments(2번째 줄)을 참조한다고 생각했고 결과가 달라 고민한 결과 위와 같이 결론을 내렸습니다. 제가 잘 이해한 것인지 확인받고싶어 질문 드렸습니다. 다시한번 강의와 무관한 질문 드려 죄송합니다.

  • 코어자바스크립트
  • javascript
  • 클로저
cloer 댓글 3 좋아요 0 조회수 574

인기 태그

인프런 TOP Writers

주간 인기글