没有重载

115 阅读1分钟

没有重载

  • ECMAScript 函数不能像传统编程那样重载。在其他语言比如 Java 中,一个函数可以有两个定义,只要签名(接收参数的类型和数量)不同就行。如前所述,ECMAScript 函数没有签名,因为参数是由包含零个或多个值的数组表示。没有函数签名,自然也就没有重载。
  • 如果在 ECMAScript 中定义了两个重名函数,则后定义的会覆盖先定义的。来看下面例子:
    function addSomeNumber(num) {
      return num + 100;
    }
    function addSomeNumber(num) {
      return num + 200;
    }
    let result = addSomeNumber(100); // 300
    
  • 这里,函数 addSomeNumber()被定义了两次。第一个版本给参数加 100,第二个加 200。最后一行调用这个函数时,返回 300,因为第二个定义覆盖了第一个定义。
  • 把函数名当成指针也有助于理解为什么 ECMAScript 没有函数重载。在前面的例子中,定义两个同名函数显然会导致后定义的重写先定义的。
    let addSomeNumber = function (num) {
      return num + 100;
    };
    addSomeNumber = function (num) {
      return num + 200;
    };
    let result = addSomeNumber(100); // 300
    
  • 看这段代码应该更容易理解发生了什么。在创建第二个函数时,变量 addSomeNumber 被重写成保存第二个函数对象了。