> 웹 프론트엔드 > JS 튜토리얼 > \'this\' 포인터가 중첩된 JavaScript 함수의 전역 개체를 가리키는 이유는 무엇입니까?

\'this\' 포인터가 중첩된 JavaScript 함수의 전역 개체를 가리키는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-19 06:48:30
원래의
650명이 탐색했습니다.

Why Does the

중첩 함수의 JavaScript "this" 포인터 미스터리

JavaScript 코드 조각에서 "this"와 관련된 예기치 않은 동작이 발생했습니다. 중첩된 함수 내의 " 포인터입니다. 개체 메서드 내에서 중첩 함수를 정의했음에도 불구하고 중첩 함수 내부의 "this" 포인터는 전역 "window" 개체를 가리킵니다.

"this" 포인터의 동작은 다음의 함수 호출 메서드에 의해 결정됩니다. 자바스크립트. 세 가지 기본 메서드가 있습니다.

  1. 직접 호출: someThing.someFunction(arg1, arg2, argN)

    • 이 메서드에서 "this" 포인터는 다음을 참조합니다. 함수를 호출하는 객체(이 경우 someThing.
  2. call()을 사용한 함수 호출: someFunction.call(someThing, arg1, arg2, argN)

    • call() 함수는 제공된 개체(이 경우 someThing)에 "this" 포인터를 명시적으로 설정합니다.
  3. apply()를 사용한 함수 호출 : someFunction.apply(someThing, [arg1, arg2, argN])

    • call()과 유사하게 apply() 함수는 "this" 포인터를 제공된 객체로 설정하지만 대신 인수 배열을 사용하세요.

제공한 예에서 중첩 함수는 명시적인 함수 호출 방법 없이 호출됩니다. 결과적으로 "this" 포인터는 기본적으로 브라우저 환경의 "window" 개체인 전역 개체로 설정됩니다.

"this" 포인터 동작을 명시적으로 지정하려면 다음 수정 사항을 사용할 수 있습니다. :

  1. std_obj.displayMe 대신 std_obj.displayMe()를 사용하세요. displayMe 메소드를 명시적으로 호출합니다.
  2. 객체의 this 포인터를 사용하여 명시적으로 중첩 함수를 정의합니다. var doSomeEffects = function() { var that = this; ... }
  3. call() 또는 apply() 함수를 사용하여 "this" 포인터를 설정합니다. doSomeEffects.call(std_obj);

다음 방법 중 하나를 활용 , 중첩된 함수 내에서 "this" 포인터의 동작을 제어하고 원하는 객체를 참조하는지 확인할 수 있습니다.

위 내용은 \'this\' 포인터가 중첩된 JavaScript 함수의 전역 개체를 가리키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿