让我说我有:
function myFunk(param1) {
if (param1) {
// do stuff
}
}
我将此改为......
function myFunk(param1, param2) {
if (param2) {
// do stuff
}
}
param2只能是真或假。这样安全吗?
答案 0 :(得分:2)
function myFunk(param1, param2) { if (param2) { // do stuff } }
param2只能是真或假。
没有。它可以有任何价值。如果仅使用一个参数(myFunk("something")
)调用该函数,则param2
将具有值undefined
。当然,这是假的(如null
,""
,0
或NaN
),因此预期您的if语句不会被执行。
这样安全吗?
这是在JavaScript中使用可选参数的标准方法,是的。有关详细信息,请参阅Function overloading in Javascript - Best practices
答案 1 :(得分:0)
在这种情况下,我觉得使用函数变量方法会更清楚。
var myFunk = function(param1) {
if (param1) {
// do stuff
}
}
and I alter this to ...
myFunk = function(param1, param2) {
if (param2) {
// do stuff
}
}
现在非常清楚发生了什么,并且以前版本的函数myFunc在任何地方都不存在。
修改更多信息
如果仅使用一个参数调用function(param1, param2) {}
,则typeof param2 == "undefined"
将返回true。例如:
myFunk = function(param1, param2) {
if (typeof param2 == "undefined") {
// do stuff with only param1
}
}
答案 2 :(得分:0)
你不能在javascript中重载函数。您最好检查arguments
或检查undefined
,以便了解来电者正在尝试做什么。例如
function myFunk(param1, param2) {
if (param2) {
// do stuff
}
}
myFunk(1); // if does not execute
myFunk(1, 2); // if executes
但是如果你传递第二个参数的假值,则if仍然不会执行
myFunk(1,0); // if does not execute
答案 3 :(得分:-1)
在javascript中无法进行函数重载,如果在同一范围内创建了两个相同的名称函数,则无论参数数量多少,都将调用具有该名称的最后一个函数。