在了解了函數的定義和函數調用外,下面我們來介紹一下JavaScript中幾種特殊的函數。
JavaScript特殊函數有3種:
下面詳細給大家講解一下這3中函數調用方式。
嵌套函數,顧名思義,就是在一個函數的內部定義另外一個函數。不過在內部定義的函數只能在內部調用,如果在外部調用,就會出錯。
舉例:
在線測試<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> //定義階乘函數 function fun(a) { //嵌套函數定義,計算平方值的函數 function multi (x) { return x*x; } var m=1; for(var i=1;i<=multi(a);i++) { m=m*i; } return m; } var sum =fun(2)+fun(3); document.write(sum); </script> </head> <body> </body> </html>
在浏覽器預覽效果如下:
分析:
上面定義的multi函數只能在fun函數內部使用,如果在fun函數外部調用就會出錯,大家可以在“在線測試”中自己修改代碼測試一下。
遞歸函數是一種非常重要的編程技術,當年我在學習其他編程技術(如C、C++、Java等)都經常用到。
遞歸函數用於讓一個函數從其內部調用其本身。不過需要注意的是,如果遞歸函數處理不當,就會使程序陷入“死循環”。為了防止“死循環”的出現,可以設計一個做自加運算的變量,用於記錄函數自身調用的次數,如果次數太多就讓它自動退出循環。
語法:
function 遞歸函數名(參數1) { 遞歸函數名(參數2) }
說明:
在定義遞歸函數時,需要2個必要條件:
(1)首先包括一個結束遞歸的條件;
(2)其次包括一個遞歸調用的語句;
舉例:
在線測試<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> var msg="\n函數的遞歸調用:\n\n"; //響應按鈕的點擊事件 function Test() { var result; msg+="調用語句:\n"; msg+=" result=sum(20);\n"; msg+="調用步驟:\n"; result=sum(20); msg+="計算結果:\n"; msg+=" result="+result+"\n"; alert(msg); } //計算當前步驟加和值 function sum(m) { if(m==0) { return 0; } else { msg+=" result="+m+"+sum("+(m-2)+ ");\n"; result=m+sum(m-2); } return result; } </script> </head> <body> <input type="button" value="測試" onclick="Test()"/> </body> </html>
在浏覽器預覽效果如下:
分析:
在上述代碼中,為了求取20以內的偶數和,定義了遞歸函數sum(m),而函數Test()對其進行調用,並使用alert()方法彈出相應的提示信息。
遞歸函數對於初學者來說可能比較難以理解,如果實在不會,可以直接忽略它。因為在JavaScript中是比較少用到遞歸函數的,遞歸函數往往都是在其他編程語言中用得比較多。到時候需要的時候我們回來翻翻就OK了。
JavaScript中有2種函數:一種是用戶自定義函數,另外一種是JavaScript語言內部已經定義好了,可以直接供我們調用的函數(也就是內置函數)。
內置函數由於已經在JavaScript語言內部定義好了的,也就是我們不需要自己定義就能用了。這樣極大方便了我們的編程。
關於JavaScript內置函數,我們在下一章詳細為大家講解。