终于把闭包搞懂了,以前的理解是函数a的返回值是函数b,b在运行的时候可以访问函数a内部的变量
现在发现,上面的只是闭包产生的一种形式,很多人用这个来举例,是因为它最简单且直观
但其实,函数的触发与执行不在一个作用域,且执行的代码体内使用了非全局的变量时,就会产生闭包
粗浅理解:函数在定义的时候,会先检查它内部是否使用了作用域外的变量,如果是的话,就会为它创建闭包环境,把用到的作用域的变量快照下来(复杂类型用引用的方式),当触发要执行该函数的时候,会使用那个存下来的快照闭包环境
所以它就可以访问到原本应该已经被销毁的变量,或者是访问到的是旧数据
现在发现,上面的只是闭包产生的一种形式,很多人用这个来举例,是因为它最简单且直观
但其实,函数的触发与执行不在一个作用域,且执行的代码体内使用了非全局的变量时,就会产生闭包
粗浅理解:函数在定义的时候,会先检查它内部是否使用了作用域外的变量,如果是的话,就会为它创建闭包环境,把用到的作用域的变量快照下来(复杂类型用引用的方式),当触发要执行该函数的时候,会使用那个存下来的快照闭包环境
所以它就可以访问到原本应该已经被销毁的变量,或者是访问到的是旧数据
展开
4
2