1. var定义的i是全局的,每次遍历都会覆盖,最后i的值为10,所以输出10次10

     for (var i = 0; i < 10; i++) {
          setTimeout(function () {
            console.log(i) // 输出10遍10
          }, 1000 + i * 100)
        }
    
  2. setTimeOut 第三个函数

     for (var i = 0; i < 10; i++) {
          setTimeout(function (val) {
            console.log(val)
          }, 1000 + i * 100, i)
        }
    
  3. 借助闭包,存储变量i,防止被覆盖

     for (var i = 0; i < 10; i++) {
          (function (i) {
            setTimeout(() => {
              console.log(i)
            }, 1000 + i * 100)
          })(i)
        }
    
  4. let定义变量,由于let存在块级作用域,i只在本轮遍历有效

     for (let i = 0; i < 10; i++) {
          setTimeout(function () {
            console.log(i)
          }, 1000 + i * 100)
        }
    

版权声明:本文为qq_32247819原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_32247819/article/details/129266310