【发布时间】:2015-09-09 11:20:35
【问题描述】:
我目前正在 http://eloquentjavascript.net/ 学习 javascript。 我已经养成了在进入下一章进行练习之前完成给定练习的习惯。
所以我刚刚读完第 4 章,并且正在完成本章末尾给出的练习。 链接:http://eloquentjavascript.net/04_data.html
我刚开始第一个练习题。
我已经成功完成了第一个练习题的前 2 个部分:
编写一个范围函数,它有两个参数,开始和结束,并且 返回一个数组,其中包含从开始到(和 包括)结束。
接下来,编写一个 sum 函数,它接受一个数字数组并返回 这些数字的总和。运行之前的程序,看看是否 确实返回 55。
使用以下代码:
// Your code here.
function range(start, end)
{
var rangearray = new Array();
for( var i = start ; (i <= end + 1) ; i++)
rangearray.push(i);
return rangearray;
}
function sum(numarray)
{
var result = 0;
//var numb = 0;
for(numb in numarray)
result += parseInt(numb);
return result;
}
console.log(sum(range(1, 10)));
// → 55 (this is supposed to be the output, and I get this without any problem)
但是,同样的练习还有一个额外的任务,这看起来很简单,但我很惨地失败了:
作为奖励分配,修改您的范围函数以采用可选的 第三个参数,表示用于构建的“步长”值 大批。如果没有给出步长,则数组元素以增量递增 一、对应旧行为。函数调用范围(1, 10, 2) 应该返回 [1, 3, 5, 7, 9]。确保它也适用于 负步长值,以便 range(5, 2, -1) 产生 [5, 4, 3, 2]。
这是我正在使用的代码:
// Your code here.
function range(start, end, step)
{
var rangearray = new Array();
end = (end < start) ? end - 1: end + 1;
step = (typeof step === 'undefined') ? 1 : parseInt(step);
var i = 0;
for( i = start ; ((step < 0) ? (i >= end) : (i <= end)) ; (i + step) )
{rangearray.push(i);}
return rangearray;
}
function sum(numarray)
{
var result = 0;
//var numb = 0;
for(numb in numarray)
result += parseInt(numb);
return result;
}
console.log(range(5, 2, -1));
// → [5, 4, 3, 2] (this is supposed to be the output)
当代码运行时,我收到一条警告消息,指出代码已运行超过 2 秒,并询问它是否应该中止。 10 秒后也会发生同样的事情。中止时,收到以下错误:
错误:中止(函数标记中的第 204 行)
从函数范围的第 9 行调用
从第 25 行调用
任何指导将不胜感激。 :)
【问题讨论】:
-
line 204 in function tick...你没想过要发布代码吗? -
网站使用沙盒?!?允许您将代码放入代码框中并在此处(在站点上)运行它......我发布的代码是可用框中编写的唯一代码。盒子里没有tick功能
-
没关系,我看到了问题,
i永远不会改变,所以,无限循环...i + step应该是i += step -
感谢工作。不知道我是怎么错过的-_-'
-
@shaz 也许可以考虑使用while循环,我认为这样会更清晰,更容易忽略。
标签: javascript arrays function