JavaScript中arguments.length与arguments.callee.length个人探究

本文探讨JavaScript中的arguments对象,它不是数组但具有length属性,用于获取函数调用时的实参数量。arguments.length表示实参长度,帮助检查参数数量。arguments.callee.length则为函数定义时的形式参数数量。文中通过示例解析arguments对象如何在实参和形参间起到桥梁作用,指出arguments对象是函数调用时创建的,它不是实参引用,而是形参的引用,保存了实参传入的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,arguments是JavaScript里的一个内置对象,说arguments像个数组,是因为它和NodeList类似,都拥有length属性,也可以写成类似数组的样式arguements[参数索引值] 来代表传给函数的参数,但它没有push和pop等数组方法,因此它不能算是数组,它只是Arguments对象的一个实例。其次,arguments只有在function体内才有意义。

       arguments.length  表示实参长度。 JS不会主动为你判断你到底给函数传了多少个参数,如果你传多了,多余的部分就不会被使用;如果你传少了,那么没接收到实参值的形参的值就是undefined。这时,我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数。此外,引用一个形式参数可以用参数名,也可以用arguments[ i ]数组形式,其中arguments[ i ]表示第i 个参数。

       arguments还为我们提供了这样一种可能,就是为一个函数传递任意数目的实际参数:
       比如说,我想判断你传给我的一些数字的大小,并取出最大的那个,对,你传多少参数都行,只要是数字(因为传的是数字函数内部就不用我再判断类型了,呵呵)。如下:

JavaScript代码:

<script language="JavaScript"  type= "text/javascript">

function max( )
{
  var m = Number.NEGATIVE_INFINITY;   // Number.NEGATIVE_INFINITY(
详情):javascript常量--负无限大,溢出时返回该值
      for (var i = 0; i < arguments.length; i++)
            { // 只要有任何一个参数比m大,那么就把这个参数的值赋给m
                if (arguments[i] > m)
                         m = arguments[i];
             }
return m;
}

 var n=max( 8,79,86,-34,-751,64,-854 ); //参数可以是任意多个

 alert ( n );

</script>

如何?此法甚妙吧?呵呵。

 

个人探究JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★

在网上搜一下关于arguements的讲解内容,你会找到很多令你头晕的解释(或许它本身就很难解释清楚),比如下面【】之间这几段:

       【在javascript中arguments对象是函数的实际参数,arguments与形式参数的值是一致的。比如,函数change(param)的形参叫param,并且只有这一个参数,那么param与arguments[0]都是对这个参数值的引用,改变其中任何一个的值,即改变了二者所有的值。
演示如下:

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

change(smallpig); 】

JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★先卖个关子哈,看完上面【】之间的解释后,我想问你,arguements到底起了个什么作用?它是如何产生的,又是如何周旋于实参和形参之间而当"第三者"的?它到底是形参的引用还是实参的引用?这之间有什么猫腻儿?JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★……JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★

说啥也没用,让代码说话最管用!下面来个弹出轰炸

JavaScript中arguments.length与arguments.callee.length个人探究 - JORTON - ★柳暗花明★
  
 从上面的代码和运行情况来看,我们不难得出以下结果:

①在smallpig的值为初始值"ceshi"而还未改成"hehe"之前,实参的第一个(即smallpig)、变量smallpig本身、形参(即param)、argument[0]的值都将是"ceshi"。

②在函数体内将smallpig的值改为"hehe"之后,实参的第一个:smallpig( 此处的smallpig在函数体外部,不受内部定义的smallpig影响 )的值仍是"ceshi" ;变量smallpig在不用var重定义前是"ceshi",定义后变成"hehe";形参( 即param )仍为"ceshi";arguments[0~2]也保持不变。

③将arguments[0]的值改为"xiaoxiaozi"之后,实参的第一个:smallpig肯定也不变,变量smallpig保持②中原态,形参param值变为arguments[0]的值"xiaoxiaozi"。

④将形参param的值改为"fuck"后,arguments[0]的值也变成"fuck"。

         综合上述结果,可得arguements对象是函数调用时创建的隐含对象,它相当于实参的一个克隆(拷贝或说复制品),但不是实参的引用,它与形参是对应关系,是形参的引用,比如,arguments[0]是第1个形参的一个引用,arguments[1]是第2个形参的一个引用……arguments[ i ]是第i+1个形参的一个引用。如果传值过程中有多个实参,而只有一个形参,那么arguments[0]是这个形参的引用,而arguments[i>0]则保持原实参传过来的值不变,可在需要时用arguments[i]调用。

           通俗地说,函数调用时实参把值传给arguments[i]后就不管了,让arguments[i]和形参两人随便鼓捣去,哪怕你实参把原先传给arguments[i]的原始值又偷着改掉了,那也没用了,arguments[i]和形参继续玩,无视实参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值