最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。
到底什么是JS闭包?
定义:闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以“记忆”它被创建时候的环境。摘自MDN
定义看懂了吗?反正我没懂T_T。
好吧,闭包其实是一种特殊的对象,这个对象由函数和创建这个函数的环境组成,而这种对象可以让外部函数访问到局部函数内的变量。
来个栗子:
function makeFunc() {
var name = "Wangxiaoming";
function displayName() {
console.log(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
在这里myFunc就成了一个闭包,这个闭包由displayName()和字符串“Wangxiaoming”组成。
到这里你可能还是不能明白什么是闭包,那让我们来看看为什么会有闭包。
为什么会有闭包?
说到闭包就一定会说道作用域的问题,在JavaScript中函数内部可以直接读取全局变量,而函数外部不能读取函数内部的局部变量。那如果我们想要在函数外部访问某一函数内部的值岂不是不能访问?这样不科学~
所以JS才有了闭包。
好吧,第一次写,先分享到这里啦,看了两天的闭包,就只理解到这里了,以后有更多理解的话会继续分享的~