求助 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

相关推荐

Jcwemz:中软证书写单行,考了什么学了什么相关技术栈的内容就说自己会什么, 没实习就包装实习简历,将项目经历写成实习做的,项目时间拉长,项目成果具体化,测试的项目成果无非就是写了多少用例查出了多少bug,重要的不是实习了多久,而是你会多少东西,你能表达的就都是你的。 cet4,随便找个地方标上就好了,不用写单行。 粗略建议,我也不在行,觉得对的可以采纳
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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