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();//再次调用该方法,则报错------

猜你喜欢

转载自blog.csdn.net/wenmin1987/article/details/83714860