這幾天敲例子老看到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.onload=ShowMessage();
- window.onload=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.onload=function(){ShowMessage();}
- window.onload=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,然後將執行結果賦值。
原文地址:http://blog.csdn.net/wangyongxia921/article/details/19639711