关于函数重载
编程语言中的函数。是一个很重要的点。函数重载是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数的返回值来区分该调用哪一个函数。但是其实在js中没有重载的概念。(相比于其他编程语言。比如java,可以为一个函数编写两个定义,只要两个定义的参数类型和数量不相同就行)
function add(n, v) {
return n + v;
}
function add(i, j, k) {
return i + 2 * j + 3 * k;
}
console.log(add(1, 2, 3)); //14
我们虽然定义了两个相同名称的函数。但是后面的会覆盖前者。 实际上上面的代码可以用另一种方式实现:
var add = function (n, v) {
return n + v;
};
add = function (i, j, k) {
return i + 2 * j + 3 * k;
};
这种方式与第一种方式没有什么区别。但是我们能直观的看到。第二个函数相当于重新给add这个变量赋值。
js中的“重载”
虽然没有重载的概念,但是相比于其他语言的函数参数,js更加灵活,他不关心参数的类型个数。甚至可以不用定义。直接在函数体内使用arguments这个类数组进行获取。
function addNums() {
return arguments[0] + arguments[1];
}
addNums(1, 2); //3
根据这一点我们可以进行一个类似于重载的操作:
function addMethodOverloading() {
if (arguments.length === 0) {
return "no argument";
} else {
let results = 0;
for (let i = 0; i < arguments.length; i++) {
results += arguments[i];
}
return results;
}
}
console.log(addMethodOverloading());
console.log(addMethodOverloading(1, 20, 50, 69, 777));
以上。