首页 > 其他 > 详细

for循环中申明变量用var和let的区别

时间:2021-05-25 16:57:45      阅读:19      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

 VS

技术分享图片

 

 

 

来来来,先做道题!如上,两个图片分别输出什么?

答案:图1会在2秒后,输出3个3;图2会在2秒之后依次输出0,1,2

可能大家会纳闷,为什么用let申明i,就可以正常输出,而用var就不行呢?

因为for循环头部的let不仅将i绑定到for循环块中,事实上它将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。setTimeout里面的function()属于一个新的域,通过 var 定义的变量是无法传入到这个函数执行域中的,通过使用 let 来声明块变量,这时候变量就能作用于这个块,所以 function就能使用 i 这个变量了。

附:由于 var 命令的变量提升机制,var 命令实际只会执行一次。而 let 命令不存在变量提升,所以每次循环都会执行一次,声明一个新变量(但初始化的值不一样)。for 的每次循环都是不同的块级作用域,let 声明的变量是块级作用域的,所以也不存在重复声明的问题。let声明变量的for循环里,每个匿名函数实际上引用的都是一个新的变量。

 

所以,最终结果

技术分享图片

 

for循环中申明变量用var和let的区别

原文:https://www.cnblogs.com/fxwoniu/p/14808766.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!