概念:闭包 的英文解释是有“block”的概念,所以,闭包就是一个封闭的函数,这个函数的特殊之处在于,是外部函数返回的,并且持有外部函数变量的函数。通常内部return的函数是一个匿名函数。
在熟悉全局作用域和局部作用域的基础上,我们来分析闭包的简单案例
在上面的案例当中,fn2就是一个闭包函数,fn2也是一个具名函数,当调用fn1的时候,向外返回一个函数,将函数赋值给全局变量result,在返回的函数中用到了局部变量i,而承接它的时全局变量result,为了保证全局变量正常访问,返回函数中的局部变量并不会立即销毁,而是将周期延长,以达到调用全局变量正常执行的结果。
闭包的用处
1.用在for循环添加事件的bug中
当通过for循环为多个同级对象绑定事件的时候,因为事件for循环和事件绑定时异步的,事件在触发的时候才能触发相应的函数执行,此时i变量的值永远是徐娜换最后一次得到的结果
1.一般解决办法
定义对象的私有属性保存每次循环的变量。然后在函数中利用定的的变量。
2.闭包解决办法
首先定义自调用的匿名函数,将变量的值作为参数传到定义的闭包函数(匿名函数)中,当for循环开启之后,匿名函数会在代码执行到本行的时候执行自调用,为对象添加事件,并把每一次的变量值保存在自己开辟的内存空间中,达到保存每次变量值的目的,当触发事件的时候,就能触发事件绑定的函数来执行。