-
var定义的i是全局的,每次遍历都会覆盖,最后i的值为10,所以输出10次10
for (var i = 0; i < 10; i++) { setTimeout(function () { console.log(i) // 输出10遍10 }, 1000 + i * 100) }
-
setTimeOut 第三个函数
for (var i = 0; i < 10; i++) { setTimeout(function (val) { console.log(val) }, 1000 + i * 100, i) }
-
借助闭包,存储变量i,防止被覆盖
for (var i = 0; i < 10; i++) { (function (i) { setTimeout(() => { console.log(i) }, 1000 + i * 100) })(i) }
-
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 版权协议,转载请附上原文出处链接和本声明。