参数
在js的函数中,调用函数所传的形参个数不一定非要跟函数定义的形参个数保持一致,因为传进来的参数在函数体里面可以用arguments这个类数组的对象获取到,arguments[0]对应第一个形参,以此类推,arguments有length属性可以知道传进来的形参的个数
function add(num1, num2){
if(arguments.length === 1){
console.log(num1 + 10)
}else if(arguments.length ===2){
console.log(num1 + num2)
}
}
add(10); // 20
add(10, 1); // 11
这个特性算不上完美的重载,但也足够弥补ECMAScript的这一缺憾了
function test(num1, num2){
use strict
if(arguments.length === 1){
arguments[1] = 10;
console.log(num1 + 10)
console.log(num2)
}else if(arguments.length ===2){
arguments[1] = 10;//最好不要这么做,严格模式下会有问题
console.log(num1 + num2)
console.log(num2)
}
}
test(10); // 20
test(10, 1); // 20
//arguments的长度是由调用函数时实际传入的参数个数决定的,不是由函数定义时的参数个数决定的
//如果函数定义了两个形参,但只传入了一个参数,修改了arguments[1]的值是不会改变第二个形参的值的
//js没有严格意义上的重载,如果先后定义两个重名的函数,后面的函数将覆盖前面的函数
function test(){
console.log(10);
}
function test(){
console.log(20);
}
test(); // 20