关于js中的重载

323 阅读1分钟

关于函数重载

编程语言中的函数。是一个很重要的点。函数重载是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数的返回值来区分该调用哪一个函数。但是其实在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));

以上。