我正在尝试将循环从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);
};这是forEach
function getBig(x){
var largeNumber = 0;
var argue = x;
argue.forEach(function(theNumber){
if(theNumber > largeNumber){
var largeNumber = theNumber;
}
})
console.log(largeNumber);
};我似乎遇到的问题是更改forEach中变量的值。我怎么才能改变呢?
发布于 2018-06-22 04:57:27
在for中,通过仅在全局上下文中使用var声明largeNumber作为全局变量。因此,当您在循环之后再次访问largeNumber时,它会给出正确的值。
在forEach中,您将在一个仅限于函数范围的函数中使用var创建largeNumber。
对于forEach,删除var声明会很好:
largeNumber = theNumber
。
发布于 2018-06-22 04:58:28
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被悬挂到最近的函数的顶部,这与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]);
https://stackoverflow.com/questions/50980874
复制相似问题