2021-07-14 ES5 ES6中作用域的区别

本文介绍了ES5和ES6在作用域上的差异,重点讨论了如何在不同场景下使用闭包。在ES5中,由于var没有块级作用域,需要借助闭包来实现特定的功能,例如在按钮点击事件中打印不同的按钮编号。而ES6引入了let关键字,它拥有块级作用域,从而避免了使用闭包的必要。通过实例展示了使用let如何正确实现预期功能,强调了ES6在作用域管理上的改进。
摘要由CSDN通过智能技术生成

ES5 ES6中作用域的区别

ES5中,如果要实现点击不同的按钮,console.log不同的“点击了第+‘i’个按钮这样的功能的话,要使用闭包。

什么是闭包?

在这里插入图片描述
可以理解为:
在这里插入图片描述
意思为:在函数结束后立即调用函数,此时调用的函数中的参数变量函数外的变量无关,可以实现每次调用都实现"点的是第1个按钮"、“点击的是第2个按钮”.

为什么要使用闭包?

ES5中原始的写法是:
在这里插入图片描述
console.log时可以发现,点击每一个按钮控制台均显示“第5个按钮被点击”。
这是因为:使用var 定义变量,函数没有自己的作用域,每次函数++的时候,函数外的变量也相应改变,所以最后输出的就是循环次数的变量值。
而使用闭包,立即调用函数,则可以使函数内形成作用域。

那每次使用都要用闭包吗?不用!

ES6中对作用域的问题作出了修改,只要将var改为let,就可以形成自己的作用域。故
在这里插入图片描述
则功能正常!
简而言之,在ES5中,var没有自身的作用域,故需要使用闭包函数来形成作用域;在ES6中,let本身自带作用域!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值