es5的 var 和 es6 的 let 区别 财富值65

2016-10-17 00:05发布

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。
不知道我这样理解对不对?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答

理解的很对,var是以函数为作用域的,而let是以块为作用域的(与大多数高级语言相同)。所以ES6的这些特性正说明js逐渐向传统高级语言靠拢,提供严格明确的语言定义,便于开发大团队协作和构建更大规模的应用。

一周热门 更多>