Javascript调用错误的功能

时间:2017-10-11 08:25:53

标签: javascript

我在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

7 个答案:

答案 0 :(得分:2)

JavaScript中没有函数重载。

答案 1 :(得分:2)

您要做的是function overloading。很遗憾,它不适用于JavaScript。

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

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

Function overloading in Javascript - Best practices

答案 2 :(得分:1)

您可以使用arguments

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

call(1);

call(1,2);

call(1,2,3);

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

解决方案可以是分离函数,每个用例都有不同的名称。

答案 5 :(得分:0)

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

其次,声明一个函数意味着与声明相同,所以对于js引擎,你的代码是

var call = fun1
var call = fun2

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

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

var call = fun2
......

所以,它将永远是后者。

如果要访问普通函数中的所有参数,可以使用arguments,或者执行此操作

function f(foo, bar, ...args) {...}
箭头函数中的

没有arguments

答案 6 :(得分:0)

如果在call(param1)之后定义call(param1, param2),则将call重新分配给call(1,2)引用。因此,当您致电call(param1)时,会调用<xsl:value-of select="person/@doctor" separator=", "/> 。在JS中没有函数重载这样的东西。你可以利用arguments object来实现接受变量参数的函数。