"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > \"this\" 포인터가 중첩된 JavaScript 함수의 전역 개체를 가리키는 이유는 무엇입니까?

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

2024-11-01에 게시됨
검색:913

Why Does the \

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

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

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

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

    • 이 메서드에서 "this" 포인터는 다음을 참조합니다. 함수를 호출하는 객체(이 경우 someThing.
  2. Function Call with 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" 포인터의 동작을 제어하고 원하는 객체를 참조하는지 확인할 수 있습니다.

릴리스 선언문 이 글은 1729291638에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3