1. 程式人生 > >javascript--函式基礎(使用引數------使用Arguments物件,使用Function物件)

javascript--函式基礎(使用引數------使用Arguments物件,使用Function物件)

Arguments物件表示引數集合,它是一個偽類陣列,擁有和陣列相似的結構,可以通過陣列下標的形式來訪問函式實參值

function f(){

  for(var i=0;i<arguments.length;i++){   //等價for(var i=0;i<f.arguments.length;i++){ 

     alert(arguments[i]);

  }

}

 1.通過Arguments物件修改每個實參的值

function f(){ 

    for(var i=0;i<arguments.length;i++){   //

         arguments.[i]=i; //修改每個實參的值

        alert(arguments[i]);

    }

}

f(3,6,6)//1,2,3

 

function f(){ 

  arguments.length=2;//修改arguments物件的length值

    for(var i=0;i<arguments.length;i++){   //

        alert(arguments[i]);

    }

}

f(3,6,6)//3,6

使用callee回撥函式

function  f(x,y,z){

  var a=arguments.length;//實參的個數

  var b=arguments.callee.length;//形成的個數,等價 f.length

if(a!=b){

    throw new Error('傳遞的引數不匹配')

  }else{

   return x+y+z;

  }

}

alert(f(3,4,5)) //12

2.使用Function物件
javascript中因為Funciton建構函式可以建立函式,所以函式就繼承了Function物件的所有屬性和方法

2.1 Function物件本身定義了一個屬性length ,在函式體 內外 皆可用,Arguments的物件的length只能在函式體 內 使用

  function check(a){

    if(a.length!=a.callee.length)//實參和形參的length不相等

    throw new Error('引數不一致')

    }

function f(a,b,c,d){

    check(arguments);

    return (a+b+c+d)/3

}

alert(f(3,4));// 引數不一致

 

 2.11作為物件,使用者還可以自定義屬性或方法

     function.property

     function.method

function f(){

  f.x=1;//函式體內定義屬性,函式被呼叫後方能訪問

  alert(f.x);//1

 alert(f.y);//2

}

f.y=2;//函式體外定義屬性,可隨時訪問

alert(f.y);//2

alert(f.x);//undefined,函式體外呼叫無效

f();

alert(f.x);//1

2.2 call()和apply()是Function物件的原型方法(改變this的指向)

function.call(thisobj,args...)//接收多個引數的列表

 function f(x,y){return x+y;}

 function o(a,b){return a*b;}

alert(f.call(o,3,4)); //返回7,把f繫結到o物件上,變成o的一個方法,然後動態呼叫f()

function.apply(this.obj,args)//接收一個數組或者類陣列(如arguments物件)

 function f(x,y){return x+y;}

 function o(a,b){return a*b;}

alert(f.apply(o,[3,4])); //返回7,把f繫結到o物件上,變成o的一個方法,然後動態呼叫f()

 

function max(){

   var m=Number.NEGSTIVE_INFINITY;//宣告一個負無窮大的數值

  for(var i=0;i<arguments.length;i++){

    if(arguments[i]>m)

  m=arguments[i];

   }

return m;

}

var a=[23,45,2,46,62,45,56,63];

var m=max.apply(Object,a);

alert(m);//返回63

也可呼叫Math的max()

var a=[23,45,2,46,62,45,56,63];

var m=Math.max.apply(Object,a);

alert(m);//返回63

 

注意:

function f(){}

f.call(Object) //動態(即臨時)繫結到Object物件的方法

Object.f();//再次呼叫該方法,則報錯------