首页 > 代码库 > js中的函数function

js中的函数function

    js的function对象在调用过程中具有一个arguments的属性,它是由脚本解释器创建的(这也是arguments创建的唯一方式)。arguments属性可以看作是一个Array对象,它有length属性,可以通过序号访问每一个参数,而且通过argument的callee属性可以获取对正在执行的Function对象的引用。如下:

function factorial(n){
  if(n<=n){
   return 1;
   }else{
      return n*arguments.callee(n-1);
   }
}
alert(factorial(5));

上面使用了callee属性完成了一个递归的算法。


Function的另一个属性是caller,它指向正在调用当前函数的父函数对象。利用callee和caller属性,可以很容易实现对堆栈的遍历,如:

function fool(v1){
   foo2(v1,v2,v3);
}
function foo2(v1,v2){
  foo3(v1,v2,v2*v2);
}

function foo3(v1,v2,v3){
  var foo=argument.callee;
  while(foo&&(foo!=window)){
  document.writeln('<br>调用参数:<br>','-------------------------------<br>');
  
   var args=foo.argument;argn=args.length;
   for(var 1=0;i<arg;i++){
   document.writeln('args[',i,']:',args[i],'<br>');
   }
  document.writeln('<br>');
  foo=foo.caller;
  }
}
foo(5);

Function是js中一个很特殊的对象,其特殊体现在他的多重身份上,如:

//function作为类的声明和实现
function ClassA(){
  this.prop1="prop1";
   this.prop2="prop2";
}
//function作为构造函数
var obj=new CalssA();

//输出true,function作为类引用
alert(obj instanceof CalssA);

Function可以声明普通函数,这和其他语言的概念是一样的,但Function还可以用于类的声明和实现,对象的构造函数以及类的引用。上面的代码中通过function关键字声明了ClassA类,并通过this关键字声明了两个属性prop1和prop2,然后在创建obj对象时,ClassA()由起到了对象构造函数的作用;最后代码中使用instanceof关键字判断obj对象是否是ClassA类的实例,此时ClassA又起到了类引用的作用。