浅谈对ES6中let和const关键字在for循环中的理解

本文探讨了ES6中新增的let和const关键字,与var声明变量的区别。let和const具有块级作用域,避免了变量提升和可重复声明的问题。在for循环中,var声明的变量会因变量提升导致所有函数返回相同的值,而let则确保每个循环内的变量独立,使得每个函数返回各自循环中的值。通过示例,解释了let如何改进了代码的逻辑和可预测性。
摘要由CSDN通过智能技术生成

ES6中对声明变量增加了两个关键字let和const,相比于之前的var,后者具有块级作用域而且不具有可重复声明和变量提升的特性,在如下for循环的例子中是否变量提升将会导致截然不同的运行结果

由于var声明的变量存在变量提升,每一次循环,变量i的值都会发生改变,而循环内被赋给数组arr的函数内部的return i里面的i指向的就是全局的i。for循环中var声明的变量i会被提到for循环外上面但不会赋值,在for循环内才开始给"i"赋值,当在循环外调用这10个函数中的任意一个,都会返回10,因为当函数被调用需要返回i时,发现函数内部并没有声明变量i于是开始向上寻找找到了全局定义的i(变量提升),并且循环已经执行结束,i的值为10。简而言之:循环内被赋给数组a的函数内部的return i里面的i指向的就是全局的i

此时可以将函数表达式声明的函数转变为立即函数将能输出5,因为每一轮循环中,该函数都会立即执行并返回给相应数组元素一个值,此时的值就是当前循环变量i的值。

 使用let来声明for循环的i ,由于let声明的变量具有块级作用域,即当前的i只在本轮循环有效,所以每一次循环就需要向事件队列中添加一个打印i的事件,每一个同步事件队列中的函数对应自己的i值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值