在JS中分为两种作用域 全局作用域和局部作用域 在新es6中还有块作用域
var a = 100; //全局作用域
function f1(){
var a = 10; //声明局部作用域
console.log(a)
}
f1();//10
console.log(a);//100
那么如果在函数外部想要访问函数内部的局部变量
function f1(){
var a = 10; //声明局部作用域
}
console.log(a);// Uncaught ReferenceError: a is not defined
显然是报错所以此时就需要我们的闭包
闭包: 是指有权访问另一个函数作用域中的变量的函数
我的理解是 : 外部用来访问函数内部的变量的方法
我们在f1的函数里加一个 内部函数f2
f2是可以访问到f1的局部变量
function f1(){
var a = 10;
function f2(){ /
console.log(a);
}
f2(); //输出10
}
f1()
再下去我们把 f2函数改成匿名函数在返回此时这个函数就是一个闭包
function f1(){
var a = 10;
return function(){
return a;
}
}
var n = f1()(); //这里第二个()是执行返回的匿名函数
console.log(n); //输出10 这样我们就访问到内部的值