对JS闭包的一点点理解

误解:JS闭包的本质是在函数内部访问函数外部的变量。(×)
例1:

var n=1;
function test(){
alert(n);
}
test(); //1

上述例子并不属于JS闭包,以上属于JS的特性:在函数内部可以直接读取全局变量。但是!!!在函数外部无法访问到函数内部定义的局部变量。
例2:

function test(){
var n=1;
}
alert(n); //ReferenceError: n is not defined

为了访问到函数1内部的局部变量,可以在函数1内部再定义一个函数2,通过函数2访问函数1内部的变量,最后返回。
例3:

function test(){
var n=1;
function closure(){
alert(n);
}
return closure;
}
var t=test();
t(); //1

例3中通过closure()函数访问test()函数内部的局部变量,此处的closure()函数就是闭包。
闭包的本质可以理解为:能够读取其他函数内部变量的函数。
闭包是“定义在一个函数内部的函数”。
闭包起到连接函数内部与函数外部的桥梁作用。

你可能感兴趣的:(JS)