Javascript调用错误的功能

Javascript calls wrong function

本问题已经有最佳答案,请猛点这里访问。

我在javascript中有两个函数(chrome和ie):

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

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

我这样打电话:

1
call(1,2);

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

1
call - param - 1


你要做的是叫function overloading。不幸的是,它在JavaScript中不可用。

但是如果你需要的话,你可以试着模仿它。

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

javascript中的函数重载-最佳实践


javascript中没有函数重载。


解决方案是使用一个内部有条件的函数。

1
2
3
4
5
6
7
8
9
function call(param1, param2){
  if(param2){
    console.log("call param - 2");
  } else if(param1) {
    console.log("call param - 1");
  } else {
    console.log("call invalid");
  }
}


您可以使用arguments

1
2
3
4
5
6
7
8
9
function call(){
   console.log("call param -" + arguments.length);
}

call(1);

call(1,2);

call(1,2,3);


如果call(param1)是在call(param1, param2)if之后定义的,则重新分配给call引用。所以当你调用call(1,2)时,会调用call(param1)。JS中没有函数重载这样的事情。您可以使用arguments对象来实现接受变量arguments的函数。


首先,JS不检查参数计数:您可以使用任何数量的参数调用任何函数。

其次,声明函数与声明的含义相同,因此对于JS引擎,您的代码是

1
2
var call = fun1
var call = fun2

1
2
3
4
var call
......
call = fun1
call = fun2

对于函数定义,该值也将被提升,因此实际上

1
2
var call = fun2
......

所以,它将永远是后一个。

如果要访问正常函数中的所有参数,可以使用arguments,或者这样做。

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

在arrow函数中没有arguments


您试图重载"call"函数。javascript不支持函数重载。

一个解决方案可能是对不同的函数进行分离,为每个用例使用不同的名称。