手记

JS闭包的小总结

说js闭包的有很多,这是一个老生常淡的问题吧,不过我还是想好好的总结一个,用文本的形式发表一下个人小总结。

说到闭包当前先要去了解这二个方面的问题,1,JS中的作用域。2,闭包都会在什么样的场景里使用到。

作用域的通俗理解—— 变量可以被访问到的范围。这里多说一点,在ES5之前是只有全局与函数作用域的,ES6开始新增了块级作用域(可以理解为一对花括号 {} 里, 比如if 、for 语句后面的)

这里还是提一下二个权威的概念:

在红宝书里是这样说的:“闭包是指有权访问另外一个函数作用域中的变量的函数”

在MDN里是这样说的:“一个函数和对其周围状态的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包,也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域”

根据以上的二个说法,大概的讲解一下:闭包其实就是一个可以访问其他函数内部变量的函数,即一个定义在函数内部的函数,或者直接说闭包是个内嵌函数也可以,闭包的作用,就是具备实现了能在外部访问某个函数内部变量的功能,让这些内部变量的值始终可以保存在内存中。

闭包产生的本质——当前环境中存在指向父级作用域的引用

要清楚并不是只用返回函数才可以算得上是产生了闭包,只要需要让父级作用域的引用存在就行了。

那总结一下闭包的各种表现形式吧

1,返回一个函数,这很好理解也是闭包经典的表现形式了。

2,在定时器、Ajax请求、事件监听、Web Workers 以及 异步处理中。也就是说只要是以回调函数的方式来体现的,实际上就是在使用闭包。

3,函数作为参数被传递的形式。

4,自执行的匿名函数。(function (){ ... })()


1人推荐
随时随地看视频
慕课网APP