【问题标题】:Javascript calls wrong function [duplicate]Javascript调用错误的函数[重复]
【发布时间】:2018-03-22 20:11:07
【问题描述】:

我在 javascript(Chrome 和 IE)中有 2 个函数:

function call(param1, param2){
   console.log("call param - 2");
}

function call(param1){
   console.log("call param - 1");
}

我是这样打电话的:

call(1,2);

但我在控制台上收到了这个:

call - param - 1

【问题讨论】:

  • javascript应该如何知道你的意思?哦,是c++/c#/java背景
  • AFAIK 你不能在 JavaScript 中使用函数重载。您最后创建的函数是被调用的函数。 (如果你切换函数声明,你的结果将是“call param - 2”。见stackoverflow.com/questions/456177/…

标签: javascript


【解决方案1】:

您尝试执行的操作称为function overloading。不幸的是,它在 JavaScript 中不可用。

但如果需要,您可以随时尝试模拟它。

请查看此链接,其中讨论了最佳方法:

Function overloading in Javascript - Best practices

【讨论】:

    【解决方案2】:

    JavaScript 中没有函数重载。

    【讨论】:

      【解决方案3】:

      您可以使用arguments

      function call(){
         console.log("call param - " + arguments.length);
      }
      
      call(1);
      
      call(1,2);
      
      call(1,2,3);

      【讨论】:

        【解决方案4】:

        解决方案是使用带有条件的单个函数。

        function call(param1, param2){
          if(param2){
            console.log("call param - 2");
          } else if(param1) {
            console.log("call param - 1");
          } else {
            console.log("call invalid");
          }
        }
        

        【讨论】:

          【解决方案5】:

          您正试图重载“呼叫”功能。 Javascript 不支持函数重载。

          一种解决方案可能是将函数分开,每个用例使用不同的名称。

          【讨论】:

            【解决方案6】:

            如果call(param1)call(param1, param2) 之后定义,如果重新分配给call 引用。因此,当您调用call(1,2) 时,会调用call(param1)。 JS中没有函数重载之类的东西。您可以使用arguments object 来实现接受可变参数的函数。

            【讨论】:

              【解决方案7】:

              首先,js 不检查参数数量:你可以调用任何带有任意数量参数的函数。

              其次,声明一个函数和声明一个意思是一样的,所以对于一个js引擎,你的代码是

              var call = fun1
              var call = fun2
              

              相同
              var call
              ......
              call = fun1
              call = fun2
              

              对于函数定义,值也会被提升,所以实际上是

              var call = fun2
              ......
              

              所以,永远是后一个。

              如果你想访问普通函数中的所有参数,你可以使用arguments,或者这样做

              function f(foo, bar, ...args) {...}
              

              箭头函数中没有arguments

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-07-18
                • 1970-01-01
                • 2012-08-02
                • 2013-05-14
                • 1970-01-01
                • 2021-04-05
                • 1970-01-01
                • 2017-04-28
                相关资源
                最近更新 更多