javascript - 为什么两个循环的输出不同?

标签 javascript

<分区>

enter image description here

我期望两个循环的输出相同

var arr = [5,6,7,8]
// first loop 
for(var i=0;i<arr.length;i++) {
  setTimeout(()=>{console.log(i,arr[i])},500)
}
// second loop 
for(let i=0;i<arr.length;i++) {
  setTimeout(()=>{console.log(i,arr[i])},500)
}

let 和 var 是否可以更改任何函数的闭包属性,尤其是在这种情况下?

最佳答案

这是因为词法作用域。

let 将保留变量值,但 var 甚至会在第一个 setTimeout 回调执行之前更新该值。

关于javascript - 为什么两个循环的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753566/

相关文章:

javascript - 当我直接点击 index.html 时,聚合物不起作用

javascript - 使用间隔更新 d3 数据

javascript - 如何在 Javascript 中访问函数内变量内的变量?

javascript - 使用 javascript 函数对 Div 进行编号

javascript - 使用 ember-data 创建新记录并提交事务

javascript - 两个addEventListener之间的冲突

javascript - 是否可以获得 node.js 正在服务的当前请求?

javascript - 如何使用 react-native-i18n 翻译数组?

javascript - 如何使用 Shiny 的javascript函数?

javascript - 显示工具提示 d3 中数据的内容