码迷,mamicode.com
首页 > 编程语言 > 详细

理解Javascript参数中的arguments对象

时间:2016-08-11 22:16:13      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

    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");//2
myfun("1");//1
myfun();//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);//1
myfun(1,2);//3
myfun(1,2,3);//6
myfun();//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

 

 

 

理解Javascript参数中的arguments对象

标签:

原文地址:http://www.cnblogs.com/yy95/p/5762606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!