不固定参数求和,arguments
啥也不说了,先上代码:
function add(){
var sum =0;
for(var i=0;i<arguments.length;i++){
sum += arguments[i];
}
alert(sum);
}
add(1,2,3,5,6);
咳咳,结果是显而易见的:17
下面说一下arguments对象。
1.在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例子:
Array.prototype.testArg = "test";
function funcArg() {
alert(arguments.testArg);
alert(arguments[0]);
}
alert(new Array().testArg); // result: "test"
funcArg(10); // result: "undefined" "10"
也就是说arguments对象的长度是由实参个数而不是形参个数决定的。
2.另外,大家都知道,javascript中,函数是不可以重载的,用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载:
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 5);
} else if(arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10); //输出 "15"
doAdd(40, 20); //输出 "60"
```;
3.arguments还有个很好用的属性:callee,可用于递归:
下面这个例子是个阶乘:
<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
function count(a){
var result =0;
if (a ==1){
result = 1;
}else{
result = a*count(a-1);
}
return result;
}
// count(4);
console.log(count(4));//result:24
因此在使用递归的时候,可以考虑使用arguments.callee。
参考:
http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html
http://www.w3school.com.cn/js/pro_js_functions_arguments_object.asp