下面三段代码的输出结果不同,前端初学者想请问一下背后的原因是什么(学不明白)
for(var i = 0;i < 3;++i){
setTimeout((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
第一段代码因为声明了形参变量i,所以函数内拿不到外层作用域的i变量,函数在被调用时又没有传值,所以值是 undefined。setTimeout 可以通过第三个及以后的参数为调用函数传值:
第二段代码因为 var 没有块作用域。
第三段代码直接调用了函数,setTimeout 没有任何作用。