for循环中setTimeout打印结果不同的原因是什么?-灵析社区

silennn

下面三段代码的输出结果不同,前端初学者想请问一下背后的原因是什么(学不明白) for(var i = 0;i { console.log(i) },0); } // 输出 undefined undefined undefined for(var i = 0;i < 3;++i){ setTimeout(function (){ console.log(i) },0); } // 输出 3 3 3 for(var i = 0;i < 3;++i){ setTimeout( console.log(i),0); } // 输出 1 2 3

阅读量:445

点赞量:17

问AI
第一段代码因为声明了形参变量i,所以函数内拿不到外层作用域的i变量,函数在被调用时又没有传值,所以值是 undefined。setTimeout 可以通过第三个及以后的参数为调用函数传值: setTimeout((i)=>{ console.log(i) },0,1) 第二段代码因为 var 没有块作用域。 第三段代码直接调用了函数,setTimeout 没有任何作用。