我正在尝试将循环从for循环转换为对数组进行迭代的forEach循环。循环的目的是在数组中找到最大的数字并返回最大的数字。
当我尝试将其作为for循环使用时它可以工作,但我似乎无法将其作为forEach循环来使用。有可能吗?否则为什么不能完成?
这是for循环,这按我想要的方式工作
function getBig(x){
var largeNumber = 0;
var argue = x;
for(i = 0; i < argue.length; i++){
if(argue[i] > largeNumber){
var largeNumber = argue[i];
}
}
console.log(largeNumber);
};
这是每个人
function getBig(x){
var largeNumber = 0;
var argue = x;
argue.forEach(function(theNumber){
if(theNumber > largeNumber){
var largeNumber = theNumber;
}
})
console.log(largeNumber);
};
我似乎遇到的麻烦是更改了forEach中变量的值。我该如何更改?
答案 0 :(得分:1)
var
被吊起并具有功能范围,而不是块范围。对于解释器,您的原始代码如下所示:
function getBig(x){
var largeNumber;
largeNumber = 0;
var argue = x;
for(i = 0; i < argue.length; i++){
if(argue[i] > largeNumber){
largeNumber = argue[i];
}
}
console.log(largeNumber);
};
在您的forEach
中,largeNumber
被提升到 nearest函数的顶部,该函数与getBig
函数不同。为了清楚起见,我们将其称为largeNumber2
-对于解释器,它看起来像这样:
function getBig(x){
var largeNumber = 0;
var argue = x;
argue.forEach(function(theNumber){
var largeNumber2;
if(theNumber > largeNumber2){
largeNumber2 = theNumber;
}
})
console.log(largeNumber);
};
这是一个单独的变量,绑定到forEach
的内部,在外部不可见。尝试通过在内部函数中不使用largeNumber
来将其分配给外部范围中的var
:
function getBig(x){
var largeNumber = 0;
var argue = x;
argue.forEach(function(theNumber){
if(theNumber > largeNumber){
largeNumber = theNumber;
}
})
console.log(largeNumber);
}
getBig([2, 3, 4, 1, 2]);
还请注意,函数的最后括号后不应包含分号。您的功能可以简化为:
const getBig = arr => console.log(Math.max(...arr));
getBig([2, 3, 4, 1, 2]);
答案 1 :(得分:0)
在 中,您要通过仅在全局上下文中使用 var 声明 largeNumber 作为全局变量。因此,当您在循环后再次访问 largeNumber 时,它将为您提供正确的值。
在 forEach 中,您正在使用 var 在功能范围内的功能中创建 largeNumber 。
对于 forEach ,删除 var 声明,它将正常工作:
largeNumber =人数
。