求助 let 和 var 的使用问题

能否给我讲一下... 为什么用var的时候结果是55555  而用let声明i的时候就变成0 1 2 3 4了
#笔试题目#
全部评论
挺经典的一个题,var是函数级作用域,let是块级。for循环是块级的,var此时是在全局作用域下,相当于运行在一个全局范围的立即执行函数里。所以同步代码执行完了再执行异步代码的时候,i已经变5了。如果采用let那么for循环每次都会新创建一个变量,这样就能满足递增输出。既然知道是作用域问题,我们还可以在for循环里用立即执行函数包裹异步代码,把i作为参数传入,内部异步代码执行时候就会拿到函数作用域中的变量,也就不会出错了
3 回复 分享
发布于 2022-05-07 10:50
let对于for,if,switch,{},function语句都会有块级作用域,每个作用域里都保存了一个i值;而var声明的变量在function里才有块级作用域,当循环结束时,定时器内部还未执行,此时i为5,所以全是5。
2 回复 分享
发布于 2022-04-18 10:34

相关推荐

做个有文化的流氓:幸遇良师,幸遇好的hr
找工作中的小确幸
点赞 评论 收藏
分享
少年郎as:这不把公司名贴出来那我可要喷你了哦
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务