世界只因有你2017-05-19 10:24:14
var temp =foo.bar=foo.bar;
temp();
연속 할당
이해하셨나요?
객체 메소드가 아닌 함수로 호출되기 때문에 이것은 undefine을 가리키고, Non-Strict 모드에서는 undef가 전역을 가리킵니다.
世界只因有你2017-05-19 10:24:14
실행 중 컨텍스트에 따라 정의되므로 자연스럽게 호출하는 사람이 누구인지
(2) 호출은 foo.bar이고, 이것이 foo 객체를 찾았습니다.
(3)을 호출하면 먼저 할당이 있고 foo.bar는 foo.bar에 할당되어 전역 변수가 됩니다. 이 함수는 전역적으로 호출되므로 당연히 정의되지 않음(브라우저 환경에서는 엄격하지 않은 모드)을 가리킵니다.
大家讲道理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);})();
의 자체 호출과 동일합니다.
(foo.bar)
이 표현식은 괄호 안에 있는 내용, 즉 foo.bar
를 반환합니다. 그런 다음 foo.bar
가 함수, 즉 foo.bar()
로 호출됩니다. #🎜🎜#대입식은 오른쪽 foo
객체의 bar
에 저장된 값을 왼쪽에 할당하여 반환하는 표현식입니다. #🎜🎜#曾经蜡笔没有小新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)})(); 여기서 가리키는 것은 전역 창입니다.
習慣沉默2017-05-19 10:24:14
할당 표현식은 전역을 반환합니다 =》window
foo.bar는 function(){alert(this)}가 전역적으로 창을 가리킵니다