JavaScript函数的arguments对象、重载问题
一、arguments对象概述:
1、ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误。
2、函数体内可以通过 arguments 对象来接收传递进来的参数,并且保存函数参数
function box() { return arguments[0]+‘ | ‘+arguments[1]+‘ | ‘+arguments[5]; //得到每次参数的值,最后结果是1 | 2 | 6 } alert(box(1,2,3,4,5,6)); //传递参数
二、arguments 的length 属性:
arguments 对象的下的length 属性可以得到参数的数量。
function box() { return arguments.length; //得到 6 } alert(box(1,2,3,4,5,6));
利用 length 这个属性,来智能的判断有多少参数,然后把参数进行合理的应用。比如,要实现一个加法运算,将所有传进来的数字累加,而数字的个数又不确定。
function box() { var sum = 0; if (arguments.length == 0){ return sum; //如果没有参数,退出 }else{ for(var i = 0;i < arguments.length; i++) { //如果有,就累加 sum = sum + arguments[i]; } return sum; //返回累加结果 } } alert(box(5,9,12));
三、arguments 的callee 的属性
是一个指针,指向拥有这个 arguments 对象的函数
1、简单的一个递归:
function box(num) { if (num <= 1) { return 1; } else { return num * box(num-1); //一个简单的的递归 } } alert(box(4));//4*3*2*1 = 24 结果是24
2、递归算法
对于阶乘函数一般要用到递归算法,所以函数内部一定会调用自身
如果函数名不改变是没有问题的,但一旦改变函数名,内部的自身调用需要逐一修改
为了解决这个问题,我们可以使用 arguments.callee 来代替。
function box(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num-1); //使用 callee 来执行自身,实现递归 } } alert(box(4));//结果也是24
四、函数的重载问题
ECMAScript 中的函数,没有像其他高级语言那种函数重载功能。(如果有相同名称的函数,则以最后一个为主)
function box(num) { return num + 100; } function box (num) { //会执行这个函数 return num + 200; } alert(box(50)); //返回结果是250,即调用的是第二个函数
function box(num,a) { return num + 100; } function box (num) { //会执行这个函数 return num + 200; } alert(box(50,3)); //结果还250 说明还是执行第二个函数
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。