Javascript中的函数参数

时间:2013-07-04 10:34:51

标签: javascript

这是一个简单的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作为第二个参数。

我的问题是这种正常做法?

3 个答案:

答案 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,但通常只会省略参数。