찾다

 >  Q&A  >  본문

JavaScript에서 이에 대한 퍼즐

어떤 객체가 이 함수를 호출하는지, 이 함수의 this가 이 객체를 가리킨다는 정보를 많이 봤습니다.
다음 예에서 함수 foo는 foo() 문을 통해 호출됩니다. 이것이 전역을 가리키는 이유는 무엇입니까? Window.foo()가 전역 개체에 의해 호출되지 않습니까?
조언 부탁드립니다. 감사합니다!

으아아아
代言代言2712일 전909

모든 응답(7)나는 대답할 것이다

  • 给我你的怀抱

    给我你的怀抱2017-06-26 10:54:59

    위에서 말한 내용에 문제가 있습니다. Foo는 전역 변수가 아닙니다. (엄격하지 않은 모드) 간단한 판단 방법은 다음과 같습니다.
    1. 함수에 상위 개체가 할당되지 않은 경우 이는 창을 가리킵니다.
    2 . 함수가 할당될 때 상위 객체의 경우 이는 foo.fn.o()와 같은 가장 가까운 상위(부모) 객체
    만 가리킵니다. o의 this는 fn을 가리킵니다

    회신하다
    0
  • 高洛峰

    高洛峰2017-06-26 10:54:59

    이런 모습인데 댓글에 적어두었어요

    으아악

    회신하다
    0
  • 代言

    代言2017-06-26 10:54:59

    内部函数,即声明在另一个函数体内的函数,都将会绑定到全局对象上,这是JavaScript的设计缺陷의 경우 올바른 설계 방법은 내부 함수의 this를 외부 함수에 해당하는 객체에 바인딩해야 한다는 것인데, 이로 인해 위와 같은 문제가 발생합니다.

    이 디자인 결함을 피하기 위해 变量替代的方法,约定俗成,可以使用selfthat를 사용할 수 있으며 코드는 다음과 같습니다.

    으아악

    회신하다
    0
  • PHP中文网

    PHP中文网2017-06-26 10:54:59

    먼저 한 가지만 이해해 봅시다.
    1: 창문은 하나의 사물이기도 하고, 특별한 사물이며, 전 세계를 대표합니다. 다음과 같은 방법으로 함수를 호출하는 경우:
    function foo(){....}
    foo();//
    두 번째 줄의 호출 메서드(함수 앞에는 사용자가 정의한 개체가 없습니다) , 우리는 그것을 '글로벌 콜'이라고 부릅니다. 실제로는 window.foo()와 동일합니다. 그래서 봤어? 전역적으로 함수를 호출하는 것은 실제로 객체에서 함수를 호출하는 특별한 경우입니다. 왜냐하면 이 시점의 객체는 window이기 때문입니다.
    2: 그렇다면 위 코드는 왜 obj 대신 전역적으로 foo()를 호출합니까? 코드를 변경하여 20:

    을 출력하도록 하겠습니다. 으아악

    두 코드를 비교하고 차이점을 찾아보세요.

    회신하다
    0
  • 某草草

    某草草2017-06-26 10:54:59

    으아악 으아악

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:54:59

    다음과 같이 코드를 다시 작성할 수 있습니다.

    으아악

    위의 예를 통해 함수를 호출할 때 call이나 apply의 형태로 자바스크립트 파서가 호출된다는 것을 알 수 있습니다. 이런 식으로 함수에 이에 대한 값을 지정하세요. 이 두 메소드의 첫 번째 매개변수는 호출 시 foo 메소드의 내부 this 값입니다. call 메소드의 첫 번째 매개변수가 null이거나 정의되지 않은 경우 기본적으로 전역 객체가 첫 번째 매개변수로 사용됩니다. foo.call(), foo.call(null), foo.call(undefine))을 사용해 보세요

    회신하다
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-26 10:54:59

    함수 내의 함수, 이 포인터가 손실되었습니다

    회신하다
    0
  • 취소회신하다