为什么道格拉斯·克罗克福德写的`if`条件除了第一个之外每次执行?

时间:2016-01-18 02:28:01

标签: javascript algorithm

我一直在读他的书,他做的事情很多。例如,在p。 48, JavaScript:好的部分,他有功能

Cat.prototype.purr = function ( n )
    var i, s = '';
    for ( i = 0; i < n; i += 1 ) 
    {
        if (s) {
            s += '-';
        }
        s += 'r';
    }
    return s;
}

其中if条件基本上无用,因为它每次都返回true但第一次返回true。该函数可以等效地编写

Cat.prototype.purr = function ( n )
    var i, s = 'r';
    for ( i = 2; i < n; i += 1 ) 
    {
        s += '-r';
    }
    return s;
} 

以获得更好的表现。另外,为什么他在i循环之外定义for

2 个答案:

答案 0 :(得分:2)

这两个功能不一样。原始函数返回n0的空字符串。如果"r"n;

,则您的函数会返回0

答案 1 :(得分:0)

我猜这只是一个例子来说明你想要用' - '或','等字符分隔项目列表的常见需求。

您可能会编写一个这样的循环,而不是'r',您将拥有项目的名称。例如。 “鲍勃-麦克-吉尔 - 插孔”

为了简化本书的示例,他刚刚使用了'r',这意味着代码可以像你说的那样以不同的方式编写。但是对于通用列表,您确实希望每次都添加分隔符,除了第一个。

关于var展示位置,如果您宣布s,那么在那里声明i就更少了,而不是在循环中再次写出var 。但我怀疑在函数开头声明你使用的所有变量可能只是他的良好实践的想法。