js Arguments对象

来源:互联网 发布:淘宝促销广告语大全 编辑:程序博客网 时间:2024/05/02 03:08

js的内置对象Arguments是函数的实际函数,他保存函数的所有参数。Arguments是一个对象,typeof Arguments得到的是Object,但有length,index的属性。强调的是Arguments不是数组Array。引用一个形式参数可以用参数名,也可以用arguments[]数组形式,其中arguments[0]表示第一个参数。

Arguments和Array的区别:

js不会主动为你判断函数传递的参数个数,多传了,多余的部分就没有被使用,少传了,那么没传的参数值就是undefined。通过Arguments的length属性可获取Function参数个数。

把arguments对象转换成一个真正的数组
虽然arguments对象不是一个真正的javascript数组,但是我们还是可以轻易的把它转换成标准的数据 ,然后进行数组操作。

var args = Array.prototype.slice.call(arguments); 

改变arguments中的参数:

说明一下arguments与真正传的形式参数是一致的:

比如,你给函数传了一个叫param的参数,并且只有这一个参数,那么param与arguments[0]都是对这个参数值的引用,改变其中一个值,即改变了二者所有的值。

function change(param)
{
//比如我传的param为simaopig,那么alert就是simaopig,
//如果啥也没传就会alert undefined
alert(param);
//用arguments[0]改变了这个参数的值
arguments[0] = 'xiaoxiaozi';
//没错,这个值变成了xiaoxiaozi
alert(param);
}

arguments的callee属性:


arguments的callee属性是用来引用当前正在执行的函数,这对未命名的函数调用自身非常有好处。

现在用arguments的这个callee同样可以简单的实现


//用函数直接量,采用arguments.callee属性实现递归函数
var result = function(x){
if(x<=1) return 1; 
return x*arguments.callee(x-1);
};
在最后提醒大家一点,既然这个arguments这么厉害,那么我们就不要为变量命名为arguments了,事实上arguments是javascript的保留字之一。嗯。


0 0