更改 foreach 循环内变量的值?使其在循环外可用

Rob*_*air 1 javascript

我设置了一个初始标志,然后执行 foreach 将标志更改为不同的值,但在 foreach 循环之外我仍然看到原始标志。仿佛一切都没有改变。但它确实在 foreach 循环内部发生了变化

该值仅在 foreach 循环内部更改,但在其外部不会更改。

我看到了许多类似的问题,但它们都处理实际的数组值,在本例中它是 foreach 循环之外的一个简单变量。

    var arr = ["one"];

    var str = 0;

    arr.forEach(function(part){

        if(part == 'one') {
            var str = 1;
            console.log('str changed to: ' + str);
        }

    })

    console.log('str is now: ' + str);
Run Code Online (Sandbox Code Playgroud)

这将返回

str changed to: 1
str is now: 0
Run Code Online (Sandbox Code Playgroud)

根据我上面的PHP逻辑应该返回“ str is now: 1 ”,为什么它的原始值为0?

Sco*_*cus 7

var这是因为您在循环中重新声明变量,而不是仅仅更新/设置它。重新声明它会清除上一个循环迭代中较早的同名变量,并在更高范围的函数中隐藏该变量。它建立一个新的值,而不是仅仅更新现有值中的值。

var arr = ["one"];
var str = 0;
arr.forEach(function(part){
 if(part == 'one') {
   str = 1;
   console.log('str changed to: ' + str);
 }
})

console.log('str is now: ' + str);
Run Code Online (Sandbox Code Playgroud)