2012-01-12 244 views
9

從我所收集的內容中,前者將賦值語句的實際值賦給onload屬性,而後者賦值實際的函數,並在窗口加載後運行。但我仍然不確定。感謝任何能夠詳細闡述的人。window.onload = init();有什麼不同?和window.onload = init;

+1

是的,這正是差異。 – 2012-01-12 04:20:59

+0

即使你給出了正確的定義,我們也不知道你不清楚什麼。謹慎闡述? – 2012-01-12 04:22:46

+0

那麼我讀的這本書說有明顯的區別,但對我來說,它完成了完全相同的事情。該函數在頁面加載後運行,使用哪一個都有什麼意義? – Andy 2012-01-12 04:26:10

回答

10
window.onload = init(); 

分配onload事件到什麼是當它執行從初始化函數返回init將立即執行立即(例如,現在,不是當窗口完成加載),結果將被分配到window.onload。這是不可能的,你會永遠想這樣,但以下是有效的:

function init() { 
    var world = "World!"; 
    return function() { 
     alert("Hello " + world); 
    }; 
} 

window.onload = init(); 

window.onload = init; 

分配onload事件給函數初始化。當onload事件觸發時,init函數將運行。

function init() { 
    var world = "World!"; 
    alert("Hello " + world); 
} 

window.onload = init; 
+1

什麼時候使用哪個例子? – 2012-01-12 04:29:10

+0

這是有道理的,但我想我的問題是,沒有()和沒有的聲明之間的區別是什麼?因爲兩個窗口完成加載時都會運行。 – Andy 2012-01-12 04:31:44

+0

@安迪 - 有一個重大的區別 - 我詳細闡述了我的回答 – 2012-01-12 04:34:06

4
window.onload = foo; 

分配FOO到窗口對象的onload屬性的值。

window.onload = foo(); 

分配通過調用FOO()到窗口對象的onload屬性返回的值。這個值是否來自return語句取決於foo,但是它返回一個函數(需要返回語句)是有意義的。

當發生加載事件時,如果window.onload的值是一個函數引用,那麼window的事件處理函數會調用它。

1

很好的答案,還有一件事補充:

瀏覽器運行時忽略非對象(string, number, true, false, undefined, null, NaN)設置爲DOM事件,如在window.onload值。因此,如果您寫window.onload = 10或上述任何價值類型(包括混合string),則活動將保持null

更有趣的事件處理程序將獲得任何對象類型值,即使window.onload = new Date是一個非常有效的代碼,將在您登錄window.onload時提示當前日期。 :)但是,當事件觸發時肯定不會發生任何事情。

因此,總是在JavaScript中爲任何事件分配一個函數。