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