2011-11-22 71 views
0

請看下面的代碼:調用函數和引用函數的區別?

window.onload = someFunction; 

很多次,我看到使用這種代碼,甚至我使用相同。但是,還有很多事情還不清楚。

  1. 以上是打印頁面加載後立即致電someFunction的權利。但是,我們是不是應該使用括號()來調用函數?
  2. 從我的理解中,我們只是將someFunction分配到window.onload,因此我們可以或不應該叫window.onload();
  3. 有沒有這樣的情況下,functionName()functionName成爲可以互換。因爲在許多地方和各種API中,我已經看到了不帶括號的函數調用。
+1

2.加載完成後,分配給'window.onload'的* function *將被**瀏覽器**調用,所以我們不必調用它。 – kapa

回答

6

你不調用的功能,你告訴它的功能通話,onload事件瀏覽器。

引用一個函數並調用一個函數是不可互換的:它們是完全不同的東西。

您可能,但是,調用一個函數返回一個功能:

function getFunction() { 
    return function() { 
     alert("I'm the real onload function."); 
    }; 
} 

window.onload = getFunction(); 
2

在這種情況下,您註冊一個回調函數的窗口onload事件。爲此,你給參考該函數,你不執行該函數(當然,除非執行函數返回另一個函數作爲回調處理程序)。當發生onload事件時,即頁面完成加載時,您指定的功能將被執行。

1

在JavaScript中,括號確實很重要。在你的情況下,你將函數對象本身分配給window的某個插槽。當放圓括號時,你明確地要求這個函數調用,因此someFunction()的值是函數的返回值,而不是函數對象本身。總之:

  • 當你看到沒有括號的功能,你正面臨着其具有的功能對象本身的價值表達
  • 當你看到帶括號的功能,表達了他價值的他回到該函數的值,因爲括號內表示的功能

一種特殊情況是someVar = new someConstructor;不應被普遍使用,並且不按照上面我簡單解釋的呼叫。對於功能的非常好的解釋,以及上面的特定陳述,請參閱道格拉斯克羅克福德的精彩圖書Javascript,好部件

相關問題