JavaScript-05 函式
一、函式介紹
函式也可以稱作方法,是將具有特定功能的程式碼寫在一塊。
函式作用:提高程式碼的重用率以及可維護性。
二、語法
function 函式名(引數1,引數2,……,引數n){ //具體的功能程式碼 }
函式的呼叫:函式名(值1,值2,……,值n);
注意:1.函式的引數,是由程式設計師根據實際情況定義,稱為:“形參”;相當於程式碼中的變數。
2.呼叫函式時:傳入的值,稱為 “實參”,可以確定引數的值和型別。傳值時 要注意引數個數以及型別,否則會出錯。
引數包括:number、string 、Boolean 、 Object、Array、function
例項:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> </body> <script type="text/javascript"> function fn2(a,b){var typ= typeof a; if(typ!="number" || (typeof b) !="number"){ console.error("傳入型別有誤!") return;//返回; } var res= a+b; document.write(res); } fn2(2,3);//5</script> </html>
輸出結果為:5.
注意:以函式做引數,往往稱為“回撥函式”。如果引數是 函式,只需要出入 函式名。
以引數作為函式例項:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> </body> <script type="text/javascript"> //作為引數的函式 function fp(x,y){ document.write("演示函式作為引數"); } function fn4(ff){ //使用 ff 函式 document.write("準備呼叫 傳入的函式"); document.write("===================<br>"); ff(); } //以函式做引數,往往稱為“回撥函式” //如果引數是 函式,只需要出入 函式名 fn4(fp); </script> </html>
關於函式“形參”的數量和“實參”的數量 的判斷:
1.arguments.length; // 實際傳入引數的 數量
2.函式名.length 函式定義的 “形參”的數量
例項:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> <script type="text/javascript"> function fn5(a,b,c,d){ var n= arguments.length;//實際傳入引數的 數量 var m= fn5.length;// 函式定義的 “形參”的數量 if(n!=m){ alert("引數個數不一致"); return; } document.write(n); document.write(m); } fn5(1,2); </script> </html>
輸出結果為:引數個數不一致;
三、函式的返回值問題:
作用:1.將函式內部的資料,帶到 函式外部; return x;
2.結束當前的函式。 return;
注意:寫在 return; 後面的程式碼將不會執行。
返回值型別:包含了 js中所有型別
number,string,Boolean,Array,Object,Function
Javascript 中,沒有函式過載的概念。如果出現了相同的函式名,寫在後面的函式會覆蓋前面的“同名”函式。由於這種機制的存在,為我們修改框架中某些函式,提供了可能。
四、函式遞迴:自己呼叫自己,關鍵點是找到遞迴函式的出口。缺點:缺點:效率非常慢。
例項:求 斐波拉契數列第30位的值。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <script type="text/javascript"> /*求數列1,1,2,3,5,8,13........; 第30位上的值 * Fn=F(n-1)+F(n-2),n>2; * F1=F2=1; * * n:number 第幾位 * * */ function fblq(n){ if(n==1 || n==2){ return 1; }else{ return fblq(n-1)+fblq(n-2); } } var res=fblq(30); alert(res); </script> </html>
輸出結果:832040