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 |
。
你要做的是叫
但是如果你需要的话,你可以试着模仿它。
请查看此链接,讨论最佳方法:
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"); } } |
号
您可以使用
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); |
如果
首先,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 ...... |
所以,它将永远是后一个。
如果要访问正常函数中的所有参数,可以使用
1 | function f(foo, bar, ...args) {...} |
。
在arrow函数中没有
您试图重载"call"函数。javascript不支持函数重载。
一个解决方案可能是对不同的函数进行分离,为每个用例使用不同的名称。