重载javascript函数有多安全?

时间:2013-06-26 12:51:41

标签: javascript

让我说我有:

function myFunk(param1) {
    if (param1) {
            // do stuff
    } 
}

我将此改为......

function myFunk(param1, param2) {
    if (param2) {
            // do stuff
    }
}

param2只能是真或假。这样安全吗?

4 个答案:

答案 0 :(得分:2)

function myFunk(param1, param2) {
    if (param2) {
            // do stuff
    }
}
     

param2只能是真或假。

没有。它可以有任何价值。如果仅使用一个参数(myFunk("something"))调用该函数,则param2将具有值undefined。当然,这是假的(如null""0NaN),因此预期您的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中无法进行函数重载,如果在同一范围内创建了两个相同的名称函数,则无论参数数量多少,都将调用具有该名称的最后一个函数。