JavaScript数组计数

JavaScript数组计数,javascript,arrays,Javascript,Arrays,各位,我在代码中遇到了一些问题,我想让它们向下计数。但是,不知道为什么会这样: 我的代码: var countx=[]; 功能范围(开始、结束、步骤){ 如果(步骤===未定义){ 步骤=1; 对于(变量i=开始;i=结束;y+=步骤) 计数x.推力(y); 返回计数x; } } log(JSON.stringify(范围(1,10));//->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] log(JSON.stringify(范围(5,2,-1));//->[1,2,3,4

各位,我在代码中遇到了一些问题,我想让它们向下计数。但是,不知道为什么会这样:

我的代码:

var countx=[];
功能范围(开始、结束、步骤){
如果(步骤===未定义){
步骤=1;
对于(变量i=开始;i=结束;y+=步骤)
计数x.推力(y);
返回计数x;
}
}
log(JSON.stringify(范围(1,10));//->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

log(JSON.stringify(范围(5,2,-1));//->[1,2,3,4,5,6,7,8,9,10,5,4,3,2]
这是因为您的
countx
变量

当您第一次执行
range
时,
countx
就像您预期的那样是
[1,2,3,4,5,6,7,8,9,10]
。但是,当您再次执行它时,您会不断将新值推入
countx
,因此您有
[1,2,3,4,5,6,7,8,9,10,5,4,3,2]

要修复此问题,请将
countx
放入函数中,以便变量的作用域为函数,并在每次执行
range
时进行初始化

功能范围(开始、结束、步骤){
设countx=[];
如果(步骤===未定义){
步骤=1;
对于(变量i=开始;i=结束;y+=步骤)
计数x.推力(y);
返回计数x;
}
}
log(JSON.stringify(范围(1,10));//->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
log(JSON.stringify(范围(5,2,-1));//->[5, 4, 3, 2]

console.log(JSON.stringify(range(1,10).reverse())
您应该在函数中声明数组,否则即使在调用函数后它也会保留其数据

在第一个
range()之前调用:
countx=[]

第一次
range()
调用后:
countx=[1,2,3,4,5,6,7,8,9,10]

在第二个
range()
调用之前:
countx=[1,2,3,4,5,6,7,8,9,10]//这里是问题所在

功能范围(开始、结束、步骤){
设countx=[];
如果(步骤===未定义){
步骤=1;
对于(变量i=开始;i=结束;y+=步骤)
计数x.推力(y);
返回计数x;
}
}
log(JSON.stringify(范围(1,10));

log(JSON.stringify(范围(5,2,-1))您可以使用单个循环和条件检查

功能范围(开始、结束、包括){
var i,结果=[];
inc=inc | | Math.abs(end-start)/(end-start)| 1;
对于(i=开始;inc>0?i=结束;i+=inc){
结果:推(i);
}
返回结果;
}
log(JSON.stringify(范围(1,10));
log(JSON.stringify(范围(5,2));

log(JSON.stringify(范围(7,7))