Javascript调用错误的函数[重复]

Posted

技术标签:

【中文标题】Javascript调用错误的函数[重复]【英文标题】:Javascript calls wrong function [duplicate] 【发布时间】: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”。见***.com/questions/456177/… 【参考方案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

【讨论】:

以上是关于Javascript调用错误的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java链式构造函数调用错误[重复]

Javascript函数调用。字符串中的转义引号[重复]

异步 - 等待 JavaScript:无法从错误对象中捕获错误详细信息 [重复]

javascript onclick调用函数,进入不了函数,报函数未定义的错误

Java servlet 对 JavaScript 的响应 [重复]

在javascript中确定调用函数[重复]