问答题1161/1593改造下面的代码,让它输出1,2,3,4,5

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

难度:
2021-07-06 创建

参考答案:

解决方法:

  • 利用IIFE(立即执行函数表达式)当每次for循环时,把此时的i变量传递到定时器中
1for(var i = 1;i <= 5;i++){ 2 (function(j){ 3 setTimeout(function timer(){ 4 console.log(j) 5 }, 0) 6 })(i) 7} 8
  • 给定时器传入第三个参数, 作为timer函数的第一个函数参数
1for(var i=1;i<=5;i++){ 2 setTimeout(function timer(j){ 3 console.log(j) 4 }, 0, i) 5}
  • 使用ES6中的let
1for(let i = 1; i <= 5; i++){ 2 setTimeout(function timer(){ 3 console.log(i) 4 },0) 5} 6

let使JS发生革命性的变化,让JS有函数作用域变为了块级作用域,用let后作用域链不复存在。

最近更新时间:2024-07-22

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!