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

Javascript函数参数输入为0而不是1,javascript,arguments,Javascript,Arguments,我为codewars kata制作的JS范围函数有问题。每当我只有两个参数而不是3时,我的开始就会被输入为0而不是1。我发现这是因为我的参数。lenth==1 if语句,但这根本不应该适用!这是我的范围声明: function range(start, end, step) { if(arguments.length<3) { if(arguments.length==2) step=1; if(arguments.length==1) end=start; start=0

我为codewars kata制作的JS范围函数有问题。每当我只有两个参数而不是3时,我的开始就会被输入为0而不是1。我发现这是因为我的参数。lenth==1 if语句,但这根本不应该适用!这是我的范围声明:

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;;  
}
我的范围开始变为0,结束变为11,但当我输入:

range(1, 11, 1);
你们能给我指一下正确的方向吗?为了我的生命,我无法理解它! 谢谢

我想你的意思是:

if(arguments.length==1)
{
  end=start; start=0; step=1;
}
我喜欢垂直排列的花括号

我想你的意思是:

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

我喜欢垂直排列的花括号

由于我无法在注释中很好地格式化代码,我将把它作为一个答案

以下是引擎如何解释代码:

if(arguments.length<3) {
    if(arguments.length==2)
        step=1;
    if(arguments.length==1)
        end=start;
    start=0;
    step=1;
}
您可以看到,
if
语句只接受一个语句作为“body”

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

如果希望
If
语句的主体由多个语句组成,则必须使用as“body”并将这些语句放在块中



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

因为我无法在注释中很好地格式化代码,我将把它作为一个答案

以下是引擎如何解释代码:

if(arguments.length<3) {
    if(arguments.length==2)
        step=1;
    if(arguments.length==1)
        end=start;
    start=0;
    step=1;
}
您可以看到,
if
语句只接受一个语句作为“body”

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

如果希望
If
语句的主体由多个语句组成,则必须使用as“body”并将这些语句放在块中



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

这也是一个很好的例子,说明为什么总是在
if
语句中使用大括号是一种更安全的编码方式,因为它可以防止像这样的意外错误。这也是为什么总是在
if
语句中使用大括号的一个很好的例子一种更安全的编码方式,因为它可以防止像这样的意外错误。