女神的闺蜜爱上我2017-07-05 11:08:26
사실 문제의 핵심은 호출/적용 기능의 역할을 이해하지 못한다는 것입니다. 공식적으로는 범위 컨텍스트를 변경한다는 의미인데 여기서는 로컬 컨텍스트를 창으로 변경합니다. 실제로 call/apply는 "빌린 칼로 사람을 죽이는" 방법입니다. 즉, 특정 속성이나 메소드가 없는데 다른 객체의 속성이나 메소드를 호출하려는 경우에는 또한 객체 상속의 구현 방법이기도 합니다.
高洛峰2017-07-05 11:08:26
사실 Windows일 필요는 없고 call을 사용하는 것이 더 좋습니다. f에서 var that=this만 선언하고 클로저 함수의 this를 that으로 작성하면 됩니다. 위 함수의 환경변수는 구해오시면 됩니다. 이해가 안 되시면 저한테 물어보세요
滿天的星座2017-07-05 11:08:26
프런트 엔드인 경우 함수에는 기본적으로 전역 변수 창을 가리키는 보이지 않는 매개변수 this가 있습니다.
foo.call(다른 객체)과 같이 이것이 가리키는 객체를 변경하지 않는 한
원문에서는 기본값인 this 매개변수를 사용합니다.
주석에는 이것이 window를 가리킨다고 명확하게 명시되어 있습니다
몇 문장 더 쓰겠습니다. 그렇지 않으면 명확하게 말씀드리겠습니다
으아악또한, 이것의 의미는 이 함수를 호출하는 객체를 가리키는 것입니다.
각 함수에는 호출할 개체가 필요합니다.
obj.f()는 f가 obj에 의해 호출된다는 의미입니다.
프런트 엔드에서 호출 개체를 지정하지 않으면 기본값은 함수를 호출하는 전역 변수 창입니다
怪我咯2017-07-05 11:08:26
JavaScript가 설계되면 내부 함수(예: 함수 본문의 함수)가 전역 개체(예: 창)에 바인딩됩니다. 여기 주석은 foo.call(window)
js 언어를 사용하여 this.x를 설명해야 한다고 생각합니다. foo()는 10을 출력합니다.
曾经蜡笔没有小新2017-07-05 11:08:26
foo.call의 첫 번째 매개변수가 반드시 window여야 한다는 것은 아닙니다. 질문의 요점은 call이 무엇인지 이해하는 것입니다.
https://developer.mozilla.org...