for (let i=1;i<=5;i++) { setTimeout(function(){console.log(i)},i*1000); }
这样就打印1,2,3,4,5
for (var i=1;i<=5;i++) { setTimeout(function(){console.log(i)},i*1000); }
这样就打印5个6。为什么呢?
我的理解,es6的 let 是区域作用域变量,所以每循环一次就是一个独立的作用域,所以5个setTimeout里的i值是相互独立的。
而es5的 var是根据函数范围来区分作用域,循环的区域不是一个单独的作用域,所以一直都是同一个i,当setTimeout开始执行的时候,for循环已经结束了,所以会打印5个6。
不知道我这样理解对不对?
对,函数作用域 => 块级作用域。
一周热门 更多>