你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
JavaScript中函数与对象的解析(四)
 

4 函数作为参数传递

在前面已经介绍了函数对象本质,每个函数都被表示为一个特殊的对象,可以方便地将其赋值给一个变量,再通过这个变量名进行函数调用。作为一个变量,它可以以参数的形式传递给另一个函数,这在前面介绍JS事件处理机制中已经看到过这样的用法,例如下面的程序将func1作为参数传递给func2

function func1(theFunc){
       theFunc();
 }
 function func2(){
       alert("ok");
 }
 func1(func2);

在最后一条语句中,func2作为一个对象传递给了func1的形参theFunc,再由func1内部进行theFunc的调用。事实上,将函数作为参数传递,或者是将函数赋值给其他变量是所有事件机制的基础。

例如,若需要在页面载入时进行一些初始化工作,可以先定义一个init的初始化函数,再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象,它可以加入windowonload事件列表。

5 传递给函数的隐含参数

当进行函数调用时,除了指定的参数外,还创建一个隐含的对象—argumentsarguments是一个类似数组但不是数组的对象,说他类似是因为他具有与数组一样的访问性质,可以用arguments[index]这样的语法取值,拥有数组长度属性lengtharguments对象存储的是实 际传递给函数的参数,而不局限于函数声明所定义的参数列表,例如:

function func(a,b){  

     alert(a);  

     alert(b);  

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

           alert(arguments[i]);  

     }  

}  

func(1,2,3);  

代码运行时会依次显示:12123。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编 程带来了很大的灵活性。arguments对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装 性,例如使用递归来计算1n的自然数之和:

var sum=function(n){  

      if(1==n)return 1;  

      else return n+sum(n-1);  

}  

alert(sum(100));

其中函数内部包含了对sum自身的调用,然而对于JS来说,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好地体现出是调用自身,所以使用arguments.callee属性会是一个较好的办法:

var sum=function(n){  

      if(1==n)return 1;  

      else return n+arguments.callee(n-1);  

}  

alert(sum(100));

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089