这是一个简单的JavaScript问题
我有一个带两个参数的函数:
function myFunction(par1, par2) {
//Part One
//This will get executed always
//Lots of logic here
if (!par2) {
//Part Two
//this will not get executed if FALSE is passed as a second argument
//more logic here
}
}
在那个函数中,我有if,并且它的执行取决于par2(bool)
在其他地方的代码中多次调用该函数,当调用它时,两个部分都被执行。这是有目的的。现在,我需要使用相同的功能,但我只需要执行第一部分。所以我想把第二个参数添加为Bool类型。它有效。
因此,例如,调用函数如:myFunction(par1)将执行这两个部分。但是,如果我将其称为myFunction (par1, true)
,它将只执行第1部分。
有效。
我知道Javascript没有进行参数检查,在某些情况下我最终将undefined作为第二个参数。
我的问题是这种正常做法?
答案 0 :(得分:2)
您可以使用以下默认参数:
function myFunction (par1, par2) {
par2 = typeof par2 !== 'undefined' ? par2 : false;
...
}
如果你在没有第二个参数的情况下调用该函数,它将安全地默认为false
而不是undefined
。
如果您发现需要大量参数,并且并非所有参数都需要,您可以将对象作为文章。这为您提供了更大的灵活性,因为您可以选择省略参数而不必担心顺序:
function myFunction (params) {
var defaults = {
par1 : 'a',
par2 : false
}
if(typeof params == 'undefined') params = {};
for(var prop in defaults){
params[prop] = typeof params[prop] == 'undefined' ? defaults[prop] : params[prop];
}
// you can now assume that all of the properties are set in params
// they will either be the value passed, or the default
}
电话可能如下:
myFunction({
par1 : 'a',
par2 : 'b'
});
或任何其他组合:
myFunction({
par1 : 'a'
});
甚至省略了所有内容:
myFunction();
答案 1 :(得分:0)
是的,这是正常的,因为它会起作用,但是更难维护和跟踪..
函数调用的参数是函数的参数。 参数按值传递给函数。 如果函数更改参数的值,则此更改不会全局或在调用函数中反映。
但是,对象引用也是值,它们是特殊的:如果函数更改了引用对象的属性,则该更改在函数外部可见。
以下是您的大量信息:REF
答案 2 :(得分:0)
我知道Javascript没有进行参数检查,在某些情况下我最终将undefined作为第二个参数。
undefined
的行为就像你通过了false
一样,因为它是一个假值。使用它没什么错。
这是正常做法吗?
是的,当然,请参见Function overloading in Javascript - Best practices。虽然不是明确地传递false
,但通常只会省略参数。