|
無論是window.setTimeout還是window.setInterval,在使用函數(shù)名作為調(diào)用句柄時都不能帶參數(shù),而在
許多場合必須要帶參數(shù),這就需要想方法解決。例如對于函數(shù)hello(_name),它用于針對用戶名顯示歡
迎信息: var userName="jack"; //根據(jù)用戶名顯示歡迎信息 function hello(_name){ alert("hello,"+_name); } 這時,如果企圖使用以下語句來使hello函數(shù)延遲3秒執(zhí)行是不可行的: window.setTimeout(hello(userName),3000); 這將使hello函數(shù)立即執(zhí)行,并將返回值作為調(diào)用句柄傳遞給setTimeout函數(shù),其結(jié)果并不是程序需要的
。而使用字符串形式可以達到想要的結(jié)果: window.setTimeout("hello(userName)",3000); 這里的字符串是一段JavaScript代碼,其中的userName表示的是變量。但這種寫法不夠直觀,而且有些
場合必須使用函數(shù)名,下面用一個小技巧來實現(xiàn)帶參數(shù)函數(shù)的調(diào)用: <script language="JavaScript" type="text/javascript"> <!-- var userName="jack"; //根據(jù)用戶名顯示歡迎信息 function hello(_name){ alert("hello,"+_name); } //創(chuàng)建一個函數(shù),用于返回一個無參數(shù)函數(shù) function _hello(_name){ return function(){ hello(_name); } } window.setTimeout(_hello(userName),3000); //--> </script> 這里定義了一個函數(shù)_hello,用于接收一個參數(shù),并返回一個不帶參數(shù)的函數(shù),在這個函數(shù)內(nèi)部使用了
外部函數(shù)的參數(shù),從而對其調(diào)用,不需要使用參數(shù)。在 window.setTimeout函數(shù)中,使用_hello
(userName)來返回一個不帶參數(shù)的11:01 2007-1-5函數(shù)句柄,從而實現(xiàn)了參數(shù)傳遞的功能。
|