1. 程式人生 > >JavaScript之 ------ 函式(一般函式、動態函式、匿名函式)

JavaScript之 ------ 函式(一般函式、動態函式、匿名函式)

函式

一、一般函式

1、格式:

function  函式名(形式引數...)

{

執行語句;

return 返回值;

}

函式是多條執行語句的封裝體,只有被呼叫才會被執行。

注意:呼叫有引數的函式,但沒有給其傳值,函式一樣可以執行,或者呼叫沒有引數的函式,給其傳值,該函式也一樣執行。

說的簡單點:只要寫了函式名後面跟了一對小括號,該函式就會執行。

2、函式雖然定義時是宣告成兩個引數,但呼叫時卻是可以傳入任意個

例:

<span style="font-size:14px;">function show(x,y){
    	 alert(x+":"+y);
     }</span>
show(4,8); 結果:4:8

show(4);結果:4:undefined

show(); 結果:undefined:undefined

show(4,8,89); 結果:4:8

綜上的例子,Js當中的函式是不存在過載的。如果有,一定就通配所有的了

3、每個函式中,存在一個 預設的陣列arguments ,裡面儲存著本次呼叫時傳入的所有實參

<span style="font-size:14px;">function show2(x,y){
    	 for(var i=0; i<arguments.length;i++){
    		 document.write(arguments[i]+" ");
    	 }
     }
show2(1,2,3,45);</span>
結果:1 2 3 45

4、函式在呼叫時的其他寫法

<span style="font-size:14px;"><script type="text/javascript">
      function getSum(){
    	  return 100;
      }
      var sum = getSum();
     // alert(sum); //結果:100
   
      var sum2 = getSum; //相當於java當中的 引用捆綁
      //alert(getSum); //結果:getSum.toString()
      // alert(sum2); //結果:sum2.toString(),也就是getSum.toString()
      //alert(sum2()); //等價於呼叫:getSum()
      
      function show2(){
    	  alert("kkkl");
      }
      alert( show2() ); //先彈出“kkkl”,再彈出“undefined”。因為裡面的函式沒有return值,而外面的函式要用變數去接,結果相當於變數沒賦值就輸出
      
   </script></span>

二、動態函式

利用Js當中內建的物件Function來構造一個函式,構造方法中的第1個引數是“形參”,第2個引數是“函式體”。

該思想類似於Java當中的類反射。我們平時寫函式時通常不用,但關鍵的地方一寫,整個程式的功能會變得很活。

<span style="font-size:14px;">var add = new Function("x,y", "var sum; sum=x+y;return sum;");
var s = add(100,39);
alert("s="+s);</span>

三、匿名函式

格式:function(){...}

例:

var demo = function(){...}
demo();

通常在定義事件屬性的行為時較為常用。

例:

function test()
{
alert(“load ok”);
}
window.onload = test;

可以寫成匿名函式的形式:

window.onload = function()
{
alert(“load ok”);
}

匿名函式就是一種簡寫格式。

四、函式呼叫

function.js

      //1 取最大值:輸出給定陣列當中值最大的元素
      //函式定義
      function getMax(arr){
    	  var max=0;//記下標
    	  for(var x=1; x<arr.length; x++){
    		  if(arr[x]>arr[max]){
    			  max = x;
    		  }
    	  }
    	  return arr[max];
      }
      
    
      //2 陣列排序
      //函式定義
      function sortArray(arr){
    	  for(var x=0; x<arr.length-1; x++){
    		  for(var y=x+1; y<arr.length; y++){
    			  if(arr[x]>arr[y]){
    				  swap(arr,x,y);
    			  }
    		  }
    	  }
      }
      //輔助函式,用於交換陣列中的兩個元素
      function swap(arr,x,y){
    	  var temp = arr[x];
    	  arr[x] = arr[y];
    	  arr[y] = temp;
      }
     
      
      //3 模擬Java當中的System.out.println()
      function println(str){
    	  document.write( str +"<br>");
      }
      
      
      //4 在陣列當中查詢元素(若存在則返回該元素的位置,否則返回-1)
      function searchElement(arr,key){
    	  for(var x=0; x<arr.length; x++){
    		  if(arr[x]==key){
    			  return x;
    		  }
    	  }
    	  return -1;
      }
      
      
      //5 二分查詢
      function binarySearch(arr,key){
    	  var max,min,mid;
    	  min=0;
    	  max=arr.length-1;
    	  while(min<=max){
    		  mid=(max+min)>>1;
    		  if(key>arr[mid]){
    			  min=mid+1;
    		  }else if(key<arr[mid]){
    			  max=mid-1;
    		  }else{
    			  return mid;
    		  }
    	  }
    	  return -1;
      }
      
      
      //6 陣列反轉
      function reverseArray(arr){
    	  for(var start=0,end=arr.length-1; start<end; start++,end--){
    		  swap(arr,start,end);
    	  }
      }
      
呼叫:
<!DOCTYPE html>
<html>
  <head>
  </head>
  
  <body>
    <script type="text/javascript" src="functions.js">
    </script>

   <script type="text/javascript">
       //1 函式呼叫
      var arr=[133,-22,33,43,1211];
      var mValue = getMax(arr);
      //alert("mValue="+ mValue);
   
       //2函式呼叫
      document.write("排序前:"+arr +"<br>"); // println(arr);
      sortArray(arr);
      document.write("排序後:"+arr);
      
      //3 函式呼叫
      println("");
      println(arr);
      
      //4 函式呼叫
      var a=searchElement(arr,133);
      //alert(a);
      
      //5 函式呼叫
      var b=binarySearch(arr,-2);
      //alert(b);
      
      //6 函式呼叫
      reverseArray(arr);
      println(arr);
      
   </script>
   </body>
</html>