博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解Javascript参数中的arguments对象
阅读量:6451 次
发布时间:2019-06-23

本文共 1775 字,大约阅读时间需要 5 分钟。

    ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载。

   Javascript中arguments的存在可以弥补javascript中函数没有重载的不足。

   Javascript中函数中的参数是以数组的形式保存的,所以在JavaScript中调用函数给函数传递的参数时,不会受到我们定义函数时设置的参数个数的限制。也就是说如果我们给一个函数定义了2个参数,我们传递的时候可以不传,可以传一个,也可以传两个,传三个...都可以,不会受函数参数个数的影响。arguments类似一个数组(但是不是真正的Array对象),同样可以像数组一样用方括号来访问它的每一个值,并用arguments.length来判断参数的个数。

    应该说我们可以向ECMAScript(javascript是对ECMAScript标准的实现)函数任意的传递参数,并可以通过arguments对象来访问这些参数。

arguments的使用:

function myfun() {	console.log(arguments.length);}myfun("1","2");//2myfun("1");//1myfun();//0

  

function myfun(num1,num2) {	if(arguments.length === 1){		console.log(arguments[0]);	} else if(arguments.length === 2) {		console.log(arguments[0]+arguments[1]);	} else if(arguments.length === 3) {		console.log(num1+num2+arguments[2]);	}else {		console.log(arguments[0]+" "+num1);	}	}myfun(1);//1myfun(1,2);//3myfun(1,2,3);//6myfun();//undefined  undefined

     命名参数可以和arguments一起使用

     和其他oo语言不一样,在ECMAScript中,所有参数传递的都是值,不可能通过引用传递参数(毕竟arguments中保存的都是参数的值)。

     arguments对象中还定义了callee属性,用来引用当前正在执行的函数,例如在递归中使用:

function factorial(num) {	if(num <=1 ) {		return 1;	} else {		return num*arguments.callee(num-1);	}}console.log(factorial(5));//120

 

 需要注意的是如果一个函数的参数有3个,传递的实参只有2个,那么arguments[2]和第三个参数是不共享的.

function foo(x, y, z) {   // 声明的函数参数数量arguments (x, y, z)  console.log(foo.length); // 3   // 真正传进来的参数个数(only x, y)  console.log(arguments.length); // 2   // 参数的callee是函数自身  console.log(arguments.callee === foo); // true   // 参数共享   console.log(x === arguments[0]); // true  console.log(x); // 10   arguments[0] = 20;  console.log(x); // 20   x = 30;  console.log(arguments[0]); // 30   // 不过,没有传进来的参数z,和参数的第3个索引值是不共享的  z = 40;  console.log(arguments[2]); // undefined   arguments[2] = 50;  console.log(z); // 40 } foo(10, 20);

  

 

转载于:https://www.cnblogs.com/yy95/p/5762606.html

你可能感兴趣的文章
修正锚点跳转位置 避免头部fixed固定部分遮挡
查看>>
linux下ping不通的解决方法
查看>>
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
irc操作小记
查看>>
JAVA 与 PHP 的不同和相同
查看>>
建立Ftp站点
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
groupbox 下的datagridview的列标题字体修改混乱
查看>>
HDU-3092 Least common multiple---数论+分组背包
查看>>
CentOS 7使用systemctl如何补全服务名称
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
C# 使用各种API
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
Shell编程学习总结
查看>>
070、如何定制Calico 网络policy(2019-04-15 周一)
查看>>
构建之法阅读笔记02
查看>>
Webstorm常用快捷键备忘
查看>>
js滚动加载到底部
查看>>