有些语言,如Ruby,Coffeescript和即将到来的Javascript版本,可以声明默认参数定义一个函数时。

复制代码代码如下所示:

功能myfunc(参数,param2 =二线){

console.log(参数,param2);

}

第一个字符串和输出:第二个字符串

MyFunc(第一个字符串);

第一个字符串和输出:第二个字符串版本2

MyFunc(第一个字符串



不幸的是,在当前版本的Javascript中,这种写作风格是无效的,那么我们能做些什么来使用我们现有的工具集呢

最简单的解决方案是这样的。

复制代码代码如下所示:

功能myfunc(参数,param2){

如果(param2 = undefined){

param2 =二线;

}

console.log(参数,param2);

}

第一个字符串和输出:第二个字符串版本2

MyFunc(第一个字符串



事实上,一个被忽略的参数在访问时总是未定义的,如果只有一个参数,这是一个很好的解决方案。如果有不止一个呢

如果您不止一个参数,您可以使用一个对象作为参数,所以每个参数都有一个明确的名称,这是一个优势。

复制代码代码如下所示:

功能myfunc(paramobject){

无功defaultparams = { {

第一个字符串参数:

param2:第二柱

param3:第三线

};

无功finalparams = defaultparams;

我们遍历每个属性 / paramobject

对于(在paramobject VAR键){

如果当前属性未继承,请继续

如果(paramobject.hasownproperty(关键)){

当前属性定义为,

它finalparams / /添加

如果(paramobject {key}!=未定义的){

finalparams {key} = paramobject {key};

}

}

}

console.log(finalparams.param1,

finalparams.param2,

finalparams param3);

}

MyFunc({参数:我自己的字符串});



这有点笨拙。如果你用这种方式很多地方,你可以写一个包函数。幸运的是,现在许多库都有相关的方法,比如用jQuery和下划线扩展。

下面使用下划线的扩展方法来获得上面相同的结果:

复制代码代码如下所示:

功能myfunc(paramobject){

无功defaultparams = { {

第一个字符串参数:

param2:第二柱

param3:第三线

};

无功finalparams = _延伸(defaultparams,paramobject);

console.log(finalparams.param1,

finalparams.param2,

finalparams param3);

}

输出:

我自己的字符串和第二个字符串和第三个字符串

MyFunc({参数:我自己的字符串});



这就是如何在当前Javascript版本中获得默认参数的方法。

这篇文章的不足之处值得批评。