关于闭包

来源:互联网 发布:培训机构做网络推广 编辑:程序博客网 时间:2024/06/03 18:17

闭包可以说是在我们的前端生涯中一定会遇到的槛,而我也相信当大家今天随着我一起探索闭包之后会对他一点也不害怕甚至得心应手的去使用它


1.首先理清一个概念 闭包是什么,官方的解释我就不在多言了,我主要向大家说明的是闭包其实就是函数,对吧再怎么变他还是函数,他之所以诞生是因为函数外部无法调用函数内部的变量,所以需要在函数内在开辟一个函数用来调用父函数的变量


2. 接下来就跟着我一起认识闭包吧 首先我用最常见闭包用法给大家举例 有四个div 我想点击每个弹出对应下标


首先大家看这个例子跟着我的思路走 在很早以前是没有ES6所以无法使用let,那这时候就需要使用闭包来解决这个问题了

首先现在的div.onclick是会触发什么呢?  它会弹出 4;为什么呢:1.首先for循环在进入页面会优先遍历这是无可厚非的但是他的i值因为垃圾回收机制的缘故是不会存入内存而内存只记住了最后出现的i值4, 而现在divs[0].onclick()是什么呢,首先他是函数最终执行结果是其本身的return值undefined 而我想让他每次都弹出对应下标则需要让i值长时间的避开垃圾回收机制存在内存中大家跟着我一起来看


我想要让i值一直存在内存中,所以我写了个自执行函数并传参 而num是依靠i值存在的这样就躲开了垃圾回收机制我的i值存在了内存中单数由于是自执行函数的原因页面进入时他就会弹出4遍i值这明显不是我们想要的 那么怎么解决呢?



当我return回来是一个函数时,页面进入自执行函数率先执行但是他执行的最终结果是一个函数而我点击这个动作相当于是对其加以调用(加括号)