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


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


一、現象


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


[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">    
  2. <html>    
  3.     <head>    
  4.         <title>Untitled</title>    
  5.             <script type="text/javascript">    
  6.   
  7.                 function ShowMessage()    
  8.                 {  alert("true"); }    
  9.                 function AlertMessage()  
  10.                 {  alert("again"); }   
  11.                 window.onload=ShowMessage();  
  12.                 window.onload=AlertMessage();     
  13.   
  14.             </script>    
  15.   
  16.     </head>    
  17.     <body>  當你看到true時看不到我 </body>    
  18.   
  19. </html>    

 

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

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


2 —— 後彈出框——window.onload爲事件

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">    
  2. <html>    
  3.     <head>    
  4.         <title>Untitled</title>    
  5.             <script type="text/javascript">    
  6.                 function ShowMessage()    
  7.                     {  alert("true");  }   
  8.                 function AlertMessage()  
  9.                     {alert("again");}   
  10.                 window.onload=function(){ShowMessage();}  
  11.                 window.onload=function(){AlertMessage();}    
  12.             </script>    
  13.     </head>   
  14.     <body>  你看到true時就看到我了  </body>    
  15. </html>    

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

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

window.οnlοad=function()

{

    ShowMessage();AlertMessage();

}


二、結論

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

functionShowMessage()  

{  alert("true"); }  

window.οnlοad=ShowMessage();

ShowMessage這個方法執行過後的返回值是undefinedwindow.οnlοad=ShowMessage();相當於執行:ShowMessage();window.οnlοad=undefined;這兩句。function對象如果只是賦值,不能夠帶括號的,你只需要:window.οnlοad=ShowMessage;這樣就可以了。帶括號表示先執行function,然後將執行結果賦值。

原文地址:http://blog.csdn.net/wangyongxia921/article/details/19639711

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章