ES5 ES6中作用域的区别
ES5中,如果要实现点击不同的按钮,console.log不同的“点击了第+‘i’个按钮这样的功能的话,要使用闭包。
什么是闭包?
可以理解为:
意思为:在函数结束后立即调用函数,此时调用的函数中的参数变量函数外的变量无关,可以实现每次调用都实现"点的是第1个按钮"、“点击的是第2个按钮”.
为什么要使用闭包?
ES5中原始的写法是:
console.log时可以发现,点击每一个按钮控制台均显示“第5个按钮被点击”。
这是因为:使用var 定义变量,函数没有自己的作用域,每次函数++的时候,函数外的变量也相应改变,所以最后输出的就是循环次数的变量值。
而使用闭包,立即调用函数,则可以使函数内形成作用域。
那每次使用都要用闭包吗?不用!
ES6中对作用域的问题作出了修改,只要将var改为let,就可以形成自己的作用域。故
则功能正常!
简而言之,在ES5中,var没有自身的作用域,故需要使用闭包函数来形成作用域;在ES6中,let本身自带作用域!