js中任何函数可以访问全局变量,但是局部变量除了访问自己内部的局部变量和自己上级的局部变量之外无法访问别的函数的局部变量。
function foo () {
var i=2;
var n=3;
var m=4;
}
function fun () {
console.log(i,n,m);
}
fun(); // =>undefind,undefind,undefind
然而在开发当中当我们需要访问别的函数的局部变量这改怎么办?
那就在函数里面写函数,这样里面的函数可以访问外面的函数的全局变量,而外面的函数访问不了里面函数的变量(这就是传说中的作用域链)
function parent () {
var i=2;
var n=3;
var m=4;
return function () {
i;
n;
m;
console.log(i+n+m);
}
}
var par = parent();
par(); // => 9
然而这个parent函数里面的匿名函数就是闭包。
闭包其实就是能够访问其他函数局部变量的函数。
网友评论