首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在foreach循环中更改变量的值?使其在循环之外可用

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

Stack Overflow用户
提问于 2019-05-23 06:54:58
回答 4查看 10.3K关注 0票数 1

我设置了一个初始标志,然后执行foreach,这会将标志更改为一个不同的值,但在foreach循环之外,我仍然可以看到原始标志。就好像什么都没变一样。但是它确实在foreach循环中发生了变化。

该值仅在foreach循环内更改,而不会在它的外部更改。

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

代码语言:javascript
复制
    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);

这将返回

代码语言:javascript
复制
str changed to: 1
str is now: 0

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-23 06:56:16

这是因为您在循环中使用var重新声明了变量,而不仅仅是更新/设置它。重新声明它将清除上一次循环迭代中具有相同名称的早期变量,并在更高的作用域中隐藏函数中的变量。它建立一个新的,而不是仅仅更新现有的值。

代码语言:javascript
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2019-05-23 06:57:02

问题是您在forEach中声明了一个新的str变量。只需放下var,它就会工作。

代码语言:javascript
复制
var arr = ["one"];
var str = 0;

arr.forEach(function(part) {
  if (part == 'one') {
    str = 1; // Notice the lack of var
    console.log('str changed to: ' + str);
  }
});

console.log('str is now: ' + str);

票数 2
EN

Stack Overflow用户

发布于 2019-05-23 07:03:33

只是作为一个额外的答案,它想要提出一种不同的方法来完成您正在使用forEach所做的事情

Array.prototype.some()在这方面做得很好。它测试是否有任何数组元素满足您传递给它的回调函数中的条件。

代码语言:javascript
复制
let arr = ["two", "one", 7];
let str = 0;

str = arr.some(part => part === 'one') ? 1 : str;

console.log('str is now: ' + str);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56265987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档