天天看點

給window.onload事件賦不同的參數,執行順序不一樣哦!一、現象二、結論

給window.onload事件賦不同的參數,執行順序不一樣哦!

這幾天敲例子老看到window.onload,有意思的是,每次指派不同,界面執行函數顯示順序不一樣,為什麼呢?

一、現象

例1: 先彈出框——window.onload成了一個普通變量

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
	<head>  
		<title>Untitled</title>  
			<script type="text/javascript">  

				function ShowMessage()  
				{  alert("true"); }  
				function AlertMessage()
				{  alert("again"); } 
				window.οnlοad=ShowMessage();
				window.οnlοad=AlertMessage();   

			</script>  

	</head>  
	<body>  當你看到true時看不到我 </body>  

</html>  
           

當你看到true的彈出框的時候,你肯定沒有看到“當你看到true時看不到我”,說明頁面還沒有載入完就已經開始執行js了。

PS:這樣可以同時加載多個函數,隻是界面出來的晚。

例2 —— 後彈出框——window.onload為事件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
	<head>  
		<title>Untitled</title>  
			<script type="text/javascript">  
				function ShowMessage()  
					{  alert("true");  } 
				function AlertMessage()
					{alert("again");} 
				window.οnlοad=function(){ShowMessage();}
				window.οnlοad=function(){AlertMessage();}  
			</script>  
	</head> 
	<body>  你看到true時就看到我了  </body>  
</html>  
           

當你看到彈出框的時候,你也會看到“你看到彈出框時就看到我了”,這個才是真正的頁面載入完才觸發。但是後一個函數覆寫前一個函數。

PS:該方法使用匿名函數執行,這種形式不可以同時加載多個函數,需要變形:

window.οnlοad=function()

{

    ShowMessage();AlertMessage();

}

二、結論

window.onload必須是指派為function類型的時候才能夠在頁面加載完成時被調用,其他情況下,就會覆寫成一個普通的全局變量了。

functionShowMessage()  

{  alert("true"); }  

window.οnlοad=ShowMessage();

ShowMessage這個方法執行過後的傳回值是undefined,window.οnlοad=ShowMessage();相當于執行:ShowMessage();window.οnlοad=undefined;這兩句。function對象如果隻是指派,不能夠帶括号的,你隻需要:window.οnlοad=ShowMessage;這樣就可以了。帶括号表示先執行function,然後将執行結果指派。



繼續閱讀