2012-08-08 3 views
2
var a = function() { 

    alert(this); // [object Window] 
    alert( a ); // undefined 

}.call(a); 

this은 여전히 ​​창 개체를 참조하고 a은 정의되지 않은 이유는 무엇입니까? 또는 다음과 같은 방법으로 this이 함수 a이 정의되지 않은 것과 같습니다."this"객체가 여전히 윈도우를 참조합니까?

var a = function() { 

    return this === a; // true 

}; 

a.call(a); 

겉으로는이 두 기능이 다른 결과를주는 이유는 누구나 설명 할 수 있습니까?

답변

4

함수의 호출이 완료 될 때까지 a이 지정되지 않기 때문에 첫 번째 예제에서는 a이 지정되지 않습니다.

는 구체적으로, 여기에 첫 번째 예에서 일어나는 내용은 다음과 같습니다

  1. 익명 함수가 정의되어있다.
  2. 이 함수는 this 매개 변수로 a을 사용하여 호출됩니다.
  3. 이 함수가 실행되지만 a이 아직 정의되지 않았기 때문에 thiswindow으로 다시 떨어집니다.
  4. undefined을 반환하며 a에 할당됩니다.
0

첫 번째 예에서는 a이 함수가 호출 될 때까지 할당되지 않으므로 a은 정의되지 않습니다.

3
var a = function() { 

    alert(this); // [object Window] 
    alert( a ); // undefined 

}.call(a); 

a 여기 기능을 평가 한 결과가된다 : 즉, a = (function() { ... }).call(a) 아닌 함수 자체.

-2

는 질문 텍스트는 문자 그대로 이미이 방법을 포함

var a = function() {...} 
a.call(a) 
+2

, 이런 식으로 사용해보십시오. –

+3

3 년 전에 제기 된 질문에 이미 대답이 있습니다. 기존 답변이나 의견을 수정하는 대신 오래된 질문을 사용하여 새로운 답변을 정당화 할 수있는 충분한 정보를 추가하는 경우에만 답변을 추가해야합니다. OP는 설명을 요구했고, 이것은 아무 것도 제공하지 않습니다. 또한 수용된 답에 더 많은 것을 추가하지 않습니다. –

관련 문제