说到闭包,其实看了些许书,自以为明白了。在牛客网做有关闭包的题,才发现学得一塌糊涂。索性记录下来,好对自己的学习有个认识。
本文结合《javascript高级程序设计》(第三版)与《你不知道的javascript》中闭包的知识点。
- 闭包,是指有权访问另一个函数作用域中的变量的函数。
作用链机制会引起一个副作用,即闭包只能取得包含函数中任何变量的最后一个值。
通过闭包,可以解决上述问题
在循环过程中每次迭代都需要一个作用域,即IIEF会通过声明并立即执行一个函数来创建作用域
①
- 当函数可以记住并访问所在的此法作用域,就产生的闭包,即使函数是在当前词法作用域之外执行。
在定时器、事件监听器、Ajax请求、跨窗口通信、Web Workers或者任何其他的异步(或者同步)任务中。只要使用了回调函数,实际上就是在使用闭包!
不知道为什么报错
①
实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同