您的位置:首页 > 编程学习 > > 正文

for循环能有两个变量吗(关于var在for循环遇到的问题解决)

更多 时间:2021-10-14 00:07:07 类别:编程学习 浏览量:971

for循环能有两个变量吗

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

前言

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循环问题内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!

    标签:var for 循环