2012-08-08 26 views

回答

4

因爲在你的第一個例子中a只有在你的函數調用完成之後纔會被分配。

具體而言,這裏的第一個例子會發生什麼:

  1. 匿名函數的定義。
  2. 使用a作爲this參數調用該函數。
  3. 該函數執行,但由於a仍未定義,所以this改爲返回window
  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

問題文本字面上包含這種方法了。 – 2015-12-24 00:46:08

+3

這個問題(三年前問)已經有了一個可以接受的答案。如果只添加足夠多的信息來證明新問題的答案,而不是對現有答案或評論進行編輯,則只應添加答案。 OP要求解釋,這沒有提供。它也沒有增加任何更多的接受答案。 – 2015-12-24 01:50:50

相關問題