• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

apply에서 this 질문입니다

21.07.06 19:56 작성 조회수 103

2

위와 같이 실행했을때 forEach 내부의 this 빼고는 전부 apply의 첫번째 인자인 myDiner가 출력되었는데 forEach 내부에서는 강의에서 말씀하신 대로 윈도우가 출력되었습니다.

그리고 map 함수도 arrow function이 아닌 일반 함수로 바꿔서 실행해봤는데 map 내부에서도 윈도우 객체를 출력하게 되었습니다.

1) 이 결과를 해석해보면 apply에서 첫번째 인자로 넘겨준 객체는 콜백함수 내부의 this까지는 영향을 미치지 않는다고 보면 될까요??

2) map 함수는 두번째 인자로 this를 줘도 적용이 되지 않는데 두번째 인자로 this를 주는 방식은 forEach에서만 적용되는 건가요?

답변 1

답변을 작성해보세요.

1

안녕하세요 좋은 질문 감사합니다~

// 1) 이 결과를 해석해보면 apply에서 첫번째 인자로 넘겨준 객체는 콜백함수 내부의 this까지는 영향을 미치지 않는다고 보면 될까요??

- this의 대상은 함수가 어떻게 호출되느냐에 따라 달라집니다. 만약 어떠한 객체의 메서드로 함수가 호출된다면 this는 객체를 가르킬 것이고, call 이나 bind, apply를 이용하여 this가 가르키는 대상을 변경해 줄 수도 있습니다. 말씀하신 forEach문 안의 콜백함수를 실행시키는 객체는 window 객체이기 때문에 window를 가르킨다고 보시면 되겠습니다.

// 2) map 함수는 두번째 인자로 this를 줘도 적용이 되지 않는데 두번째 인자로 this를 주는 방식은 forEach에서만 적용되는 건가요?

- 앗 아닙니다. map에서도 forEach 처럼 this를 동일하게 변경할 수 있습니다. 아래 예제에서 map의 두번째 인자인 this를 살펴보시기 바랍니다.

function menuGlobal(item1, item2){
  var val = [item1, item2].map(function(item){
    return item + " " +this.name
  }, this);
  
  console.log(val);
}

var myDiner = {
  name : "goood!"
}

menuGlobal.apply(myDiner, ["hi", "there"]);

이상입니다.

답변이 도움이 됐으면 좋겠습니다. 감사합니다!

hello님의 프로필

hello

질문자

2021.07.07

아.. 이해가 되었습니다 감사합니다!!