avascript中的变量对象
https://www.cnblogs.com/-walker/p/5600393.html
在JS中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量。
1,什么是变量?
这个函数体内的参数非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的[I]和。长度。
2,有什么作用?
JS语法不支持重载!但可用参数对象模拟重载效果。
参数对象:函数对象内,自动创建的专门接收所有参数值得类数组对象。
参数[i]:获得传入的下标为i的参数值
arguments.length:获得传入的参数个数!
重载:
程序中可定义多个相同函数名,不同参数列表的函数,
调用者不必区分每个函数的参数,
执行时,程序根据传入的参数个数,自动判断选择哪个函数执行。
例子如下:
// 1、如果用户传入一个参数,求平方
function sum(a){
console.log(a*a);
}
//如果用户传入两个参数,就求和
function sum(a,b){
console.log(a+b);
}
sum(4); //?
sum(4,5); //?
上述例子中本意是想让同名函数之和()根据参数不同输出不同结果,但是总结是函数名字,本质也是个变量,
第二个会覆盖第一个,所以上述的正确输出答案是:NaN时,9所以这样显然不可以。
如果用参数,就简单多了。
如下2个例子:
//2、
function calc(){
//如果用户传入一个参数,求平方
if(arguments.length==1){
console.log(arguments[0]*arguments[0]);
}else if(arguments.length==2){
//如果用户传入两个参数,就求和
console.log(arguments[0]+arguments[1]);
}
}
calc(4); //16
calc(4,5); //9
/*3、无论用户传入几个数字,都可以求和*/
function add(){
//arguments:[]
//遍历arguments中每个元素,并累加
for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]);
return sum;//返回和
}
console.log(add(1,2,3)); //6
console.log(add(1,2,3,4,5,6)); //21
这就是JS利用arguments重载的效果,简单理解就是一个函数重复利用.
的arguments.length是有实参决定,即函数调用时候里面的参数个数决定!