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调用错误的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
异步 - 等待 JavaScript:无法从错误对象中捕获错误详细信息 [重复]
javascript onclick调用函数,进入不了函数,报函数未定义的错误