-3

假设我有:

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

我将其更改为...

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

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

4

4 回答 4

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

param2 只能是真或假。

不,它可以有任何价值。如果仅使用一个参数 ( myFunk("something")) 调用该函数,则该函数param2的值为undefined。当然,这是虚假的(如null、或),因此正如预期的那样,您的 if 语句将不会被执行。""0NaN

这安全吗?

这是在 JavaScript 中使用可选参数的标准方式,是的。有关更多详细信息,请参阅Javascript 中的函数重载 - 最佳实践

于 2013-06-26T13:00:31.853 回答
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
于 2013-06-26T12:58:44.597 回答
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
    }
}
于 2013-06-26T12:55:38.603 回答
-1

在 javascript 中函数重载是不可能的,如果你在同一个范围内创建了两个同名的函数,无论参数的数量如何,总是会调用具有该名称的最后一个函数。

于 2013-06-26T13:06:06.063 回答