我目前正在遵循 Eloquent Javascript 的练习,但在一项练习中遇到了一些困难。我用代码来解释一下:
var _numberArray = [];
function range(start, end, step)
{
console.log(_numberArray);
if (!step)
{
step = 1;
}
if (step < 0)
{
for(var i = start; i >= end; i -= step)
{
_numberArray.push(i);
console.log(_numberArray);
}
}
else
{
for(var i = start; i <= end; i += step)
{
_numberArray.push(i);
console.log(_numberArray);
}
}
return _numberArray;
}
function sum(array)
{
var total = 0;
for (var i = 0; i < array.length; i++)
{
total += array[i];
}
return total;
}
console.log(sum(range(42,14,-2)));
因此,我创建了范围函数,在其中检查步骤参数是否已设置。如果不是,则将默认的步长变量设置为 1。如果步长小于 0,只要第一个参数大于第二个参数,就一定要循环其中,并用给定的步长量递减该值。这对于递增也是一样的。
但是,只有当我使用负值时,此代码才会导致崩溃。所以当我做“sum(range(22,6,-2));”时代码崩溃了。反过来“sum(range(6,22,2));”它确实有效。当我更换时:
for(var i = start; i >= end; i -= step)
{
_numberArray.push(i);
console.log(_numberArray);
}
对于:
for(var i = start; i >= end; i--)
{
_numberArray.push(i);
console.log(_numberArray);
}
它又起作用了!有人可以帮助我并让我了解为什么它崩溃以及为什么最后一种方法有效吗?
谢谢。
最佳答案
由于步长值为负,并且您正在向下迭代,因此您需要添加它,而不是减去它:
for(var i = start; i >= end; i += step)
减去 -2 与加 2 相同,因此得到 42, 44, 46, ... 并且该值始终大于“end”(14),因此是无限循环。
关于JavaScript : The sum of its range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965173/