您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

关于var在for循环遇到的问题解决

51自学网 2022-05-02 21:36:27
  javascript

前言

var是ES5定义变量的一种声明方式,一直听说var声明变量,存在循环变量泄漏为全局变量问题,但总是想不明白这个“全局”有什么影响,还有,到底什么时候输出的结果是递增/减的值,什么时候输出一样的值,也不清楚。

问题复现

for (var i = 1; i <= 5; i++) {  setTimeout(function timer() {    console.log(i)  }, i * 1000)}

预期效果:12345

打印结果:66666

解决方式

闭包

for (var i = 1; i <= 5; i++) {    (function (j) {        setTimeout(function timer() {            console.log(j)        }, j * 1000)    })(i)}

setTimeout 第三参数

for (var i = 1; i <= 5; i++) {   setTimeout(       function timer(j) {           console.log(j)       },       i * 1000,       i   )}

使用 let 定义 i

for (let i = 1; i <= 5; i++) {    setTimeout(function timer() {        console.log(i)    }, i * 1000)}

let

关于let,记住:当前的i只在本轮循环有效,每一次循环的i其实都是一个新的变量。

JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

for (let i = 0; i < 3; i++) {let i = 'abc';console.log(i);}// abc// abc// abc

总结

到此这篇关于var使用for循环遇到的问题解决的文章就介绍到这了,更多相关var for循环问题内容请搜索wanshiok.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持wanshiok.com!


Vue中插槽和过滤器的深入讲解
iview 权限管理的实现
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1