Javascript函数参数输入为0而不是1

时间:2014-09-06 02:41:47

标签: javascript arguments

我遇到了一个JS范围函数的问题,我正在制作一个代码新闻kata。每当我只有两个参数而不是3时,我的开始输入为0而不是1.我发现这是因为我的参数.lenth == 1 if if statement,但这根本不适用!这是我的范围声明:

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);

你能指点我正确的方向吗?对于我的生活,我无法理解! 谢谢!

2 个答案:

答案 0 :(得分:4)

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

以下是引擎解释代码的方式:

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语句只接受单个语句作为&#34; body&#34;。

end=start;是一个表达式语句,因此成为&#34; body&#34; if声明。以下表达式语句(start=0; step=1;)位于相同的&#34;级别&#34;作为if语句,只是在它之后执行。

如果您希望if语句的正文包含多个语句,则必须使用block statement作为&#34; body&#34;并把这些陈述放在街区内。


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

答案 1 :(得分:2)

我认为你的意思是:

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

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