apply에서 this 질문입니다
위와 같이 실행했을때 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"]);
이상입니다.
답변이 도움이 됐으면 좋겠습니다. 감사합니다!
섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.
0
15
1
call stack 표현이 잘못표현된것이 아닌가요?
0
34
2
React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.
0
33
1
일반 강의와 차이점?
1
43
1
!= 연산자의 역할
0
34
1
중요하진 않지만 설명하신부분에서 안된부분..
0
32
1
강의 듣는 순서가 어떻게 되나요?
0
47
1
stopPropagation()에 대해서 질문 있습니다.
0
49
2
12.13) 하단 여백 스타일링 관련 질문 드립니다.
0
62
2
27강 Context내 RSC 사용 관련 문의
0
78
3
혹시 다음 강의 제작 예정된 것들이 있을까요?
0
73
1
Enable Linting 항목을 찾을수가 없습니다.
0
43
2
에러 질문드립니다
0
60
2
1강 질문
0
64
2
prototype.constructor 를 꼭 설정해주어야 하는 이유가 뭔가요?
0
254
0
생성자 함수와 클래스 중 어느 것을 사용하는게 효율적인가요?
1
240
1
클로저 파트 마지막 예시에 관해 질문있습니다.
1
266
1
이벤트 위임관련...
1
255
1
let, const에서의 호이스팅에 대해서...
2
277
1
생성자 함수관련...
2
227
1
function과 arrow function 관련
1
288
1
객체 공장장, <생성자> 편에 잘못된 내용이 있는것 같습니당
1
244
1
동영상강의에서 사용했던 코드 공유 부탁드립니다.
1
198
1
생성자 내에 함수 선언
2
324
2





