首先要理解变量的作用域,无非就是两种:全局变量和局部变量。
在函数内可以访问到函数外部的变量,但在函数外部访问不了函数内部的变量
var n=1;
function f1(){
console.log(n);
}
f1(); // 输出1,在函数内可以访问到函数外部的变量
function f1(){
var n=1;
}
console.log(n); // 输出error,在函数外部访问不了函数内部的变量
那么在函数外部怎么才能访问得到函数内部的变量呢,这个时候我们只要在f1中加一个函数f2
function f1(){
var n=1;
function f2(){
console.log(n)
}
}
这时候f2就可以访问到f1里面的变量了,因为f1的变量n对于f2来说是在f2的外部,可以被f2访问到。
但这时候还不能在f1外面访问到n,还需要将f2返回
function f1(){
var n=1;
function f2(){
console.log(n)
}
return f2;
}
这个时候就可以在f1外部,调用f2,从而访问到f1内的局部变量
var n=1;
function f2(){
console.log(n)
}//这样就形成了一个闭包,闭包就是能够读取其他函数内部变量的函数