찾다

 >  Q&A  >  본문

자바스크립트 - js 이 질문

으아아아

(2)와 (3)의 결과가 다른 이유를 설명할 수 있나요?

PHP中文网PHP中文网2814일 전431

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

  • 世界只因有你

    世界只因有你2017-05-19 10:24:14

    var temp =foo.bar=foo.bar;
    temp();
    연속 할당
    이해하셨나요?
    객체 메소드가 아닌 함수로 호출되기 때문에 이것은 undefine을 가리키고, Non-Strict 모드에서는 undef가 전역을 가리킵니다.

    회신하다
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:24:14

    실행 중 컨텍스트에 따라 정의되므로 자연스럽게 호출하는 사람이 누구인지

    (2) 호출은 foo.bar이고, 이것이 foo 객체를 찾았습니다.

    (3)을 호출하면 먼저 할당이 있고 foo.bar는 foo.bar에 할당되어 전역 변수가 됩니다. 이 함수는 전역적으로 호출되므로 당연히 정의되지 않음(브라우저 환경에서는 엄격하지 않은 모드)을 가리킵니다.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:24:14

    코드 주석으로 판단하면 질문자가 이해하지 못할 수도 있습니다(3). 설명은 다음과 같습니다.
    foo.bar = foo.bar 표현식은 익명 함수를 반환합니다. 그것은 function() {alert(this);}입니다. foo.bar = foo.bar表达式返回的是匿名函数,即function() {alert(this);}
    所以再调用相当于该匿名函数的自调用,即(function() {alert(this);})();

    补充下:
    (foo.bar)表达式返回小括号里的,即foo.bar。然后foo.bar作为函数被调用,即foo.bar()
    而赋值表达式是将右侧的即foo对象的bar그래서 이 호출은 익명 함수, 즉 (function() {alert(this);})();의 자체 호출과 동일합니다.

    #🎜🎜#Addition: #🎜🎜#(foo.bar) 이 표현식은 괄호 안에 있는 내용, 즉 foo.bar를 반환합니다. 그런 다음 foo.bar가 함수, 즉 foo.bar()로 호출됩니다. #🎜🎜#대입식은 오른쪽 foo 객체의 bar에 저장된 값을 왼쪽에 할당하여 반환하는 표현식입니다. #🎜🎜#

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

    曾经蜡笔没有小新2017-05-19 10:24:14

    var foo = {
    bar: 함수 () {

    으아아아

    }
    };
    (foo.bar)(); // 참고, OK => foo (2)
    참고: (foo.bar)()는 첫 번째 foo.bar()와 동일합니다. foo 객체의 bar 메소드입니다. 이것은 foo 객체를 가리킵니다.
    (foo.bar = foo.bar)(); // 전역인가요? (3)
    참고: 먼저 foo.bar = foo.bar, foo를 살펴보세요. .bar는 foo.bar에 할당된 함수() {alert(this);}이고, (foo.bar = foo.bar)는 (function(){alert(this)})와 동일하며, 외부()를 추가합니다. 인스턴트 함수입니다:
    (function(){alert(this)})(); 여기서 가리키는 것은 전역 창입니다.

    회신하다
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:24:14

    할당 표현식은 전역을 반환합니다 =》window
    foo.bar는 function(){alert(this)}가 전역적으로 창을 가리킵니다

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