在javascript函数参数中命名冗余

时间:2016-08-20 15:59:53

标签: javascript jquery

如何设置计时参数的默认值?

function active_timer(timing){
    interval = setInterval(function(){
        console.log('interval');
    }, timing);
}

我可以这样做

function active_timer(timing){
    var time = 1000;
    if(timing){
        time = timing
    }
    interval = setInterval(function(){
        console.log('interval');
    }, time);
}

我的问题是命名,时间和时间实际上是一回事,我怎样才能在javascript中编写更少的冗余代码?

4 个答案:

答案 0 :(得分:1)

您可以在功能中添加支票,

if (typeof timing == 'undefined')
    timing = defaultValue;

或(ternary operator

timing = (typeof timing == 'undefined') ? defaultValue : timing;

timing = timing || defaultValue 

示例typeof

function x(y) 
{
  if (typeof y == 'undefined')
    y = 5;

  return y;
}

alert(x()); // 5

alert(x(25)); // 25

JSFiddle

阅读材料

typeof

MDN - Default Parameters

答案 1 :(得分:1)

参数是一个(本地)变量,就像任何其他变量一样。

timing = timing || 1000;

您可以在世界范围内无需小心地覆盖它。

答案 2 :(得分:1)

在ES2015(又名“ES6”)及更高版本中,您可以为参数指定默认值:

// ES2015+
function active_timer(timing = 1000) {
// -------------------------^^^^^^^
    interval = setInterval(function(){
        console.log('interval');
    }, timing);
}

在ES5及更早版本中 (从技术上讲,所有这些也适用于ES2015 +):您可以为函数参数赋值,因此您不需要单独的变量,除非你想要一个。如果在没有任何参数的情况下调用active_timer,则timing将具有值undefined

您可以选择如何确定是否需要应用默认值:

if (timing === undefined) {
    timing = 1000;
}

if (typeof timing === "undefined") {
    timing = 1000;
}

if (arguments.length === 0) {   // NOT RECOMMENDED
    timing = 1000;
}

(不推荐使用,因为在函数中使用arguments会影响其性能。)

或者,如果您知道永远不会使用active_timer调用0,则可以使用curiously-powerful || operator

function active_timer(timing){
    interval = setInterval(function(){
        console.log('interval');
    }, timing || 1000); // Only if you know timing won't be 0
}

a || b的结果是a的值,如果它是 truthy ,或者b的值,如果a falsy 。虚假值为0""undefinednullNaN,当然还有false

答案 3 :(得分:0)

您可以使用ES2015的default parameterarrow function

function activeTimer(timing = 1000) {
    setInterval( () => {
        console.log('interval:' + timing);
    }, timing);
}

activeTimer();

另请参阅fiddle