2014-09-06 62 views
0

我遇到了一个JS范围函数的问题,我正在为codewars kata编写一个函数。每当我只有两个参数而不是3时,我的开始被输入为0而不是1.我发现这是因为我的arguments.lenth == 1 if语句,但是根本不适用!这是我的范围声明:Javascript函数参数输入为0而不是1

function range(start, end, step) { 
    if(arguments.length<3) { 
    if(arguments.length==2) step=1; 
    if(arguments.length==1) end=start; start=0; step=1; 
    } 
    if(end < start) return []; 

    arr = []; 

    while(start < end) { 
    arr.push(start); 
    start+=step; 
    } 
    return arr;; 
} 

当我试着输入:

range(1,11); 

我的范围的开始变为0,最终变成11,但是当我输入:

range(1, 11, 1); 

你们能请你指点我正确的方向吗?对于我的生活,我无法弄清楚它! 谢谢!

回答

3

由于我无法在评论中很好地格式化代码,因此我会将其作为答案。

下面是引擎是如何解释你的代码:

if(arguments.length<3) { 
    if(arguments.length==2) 
     step=1; 
    if(arguments.length==1) 
     end=start; 
    start=0; 
    step=1; 
} 

The syntax for an if statement is:

if (Expression) Statement 

所以你看,if声明只接受单一声明为 “体”。

end=start;是一个表达式语句,因此它成为if语句的“主体”。以下表达式语句(start=0; step=1;)与if语句处于相同的“级别”,并且仅在它之后执行。

如果你想if声明的正文由多条语句,你必须使用一个block statement为“体”,并把这些语句块内。


语句/表达式之间的缩进和空白在JavaScript中没有意义。

+1

这也是一个很好的例子,为什么用'if'语句总是使用大括号是一种更安全的编码方式,因为它可以防止这样的意外错误。 – jfriend00 2014-09-06 04:58:39

1

我想你的意思是这样的:

if(arguments.length==1) 
{ 
    end=start; start=0; step=1; 
} 

我喜欢垂直排列的大括号。