我遇到了一个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);
你能指点我正确的方向吗?对于我的生活,我无法理解! 谢谢!
答案 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;
}
我喜欢垂直排列的花括号。