javascript - 更改foreach循环内变量的值?使其在循环外可用
问题描述
我正在设置一个初始标志,然后执行一个 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);
这将返回
str changed to: 1
str is now: 0
根据我上面的 PHP 逻辑应该返回“ str is now: 1 ”,为什么它的原始值是 0?
解决方案
这是因为您在循环中重新声明变量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);
推荐阅读
- java - 从文本文件中读取带有 BufferedReader 的整数 - Java
- c++ - 显式调用 c++ 插入运算符 (>>) 的特定重载?
- heroku - JHipster GitLab CI 权限被拒绝
- angular-material - 如何删除空间底部垫形式场
- c# - 在按钮单击事件中从另一个类 Person 调用方法 PresentPerson()
- c++ - 递归到达一个非空的二叉搜索树
- ffmpeg - 如何使用 FFmpeg 将所有 png 文件从特定数字转换为 gif
- python - 找不到真正的 FFmpeg 的安装(ffprobe 自带)
- vb.net - 将对象或数组转换为不带列名的 JSON
- javascript - 在销毁调用之前清空数组