要理解闭包,首先要理解变量的作用域。
JS中变量作用域有两个:全局变量以及局部变量,顾名思义,全局变量就是在任何位置都可以引用的变量,局部变量就是只能在特定位置才能引用的变量,看下面代码。
var globalScope="global scope";
function f(){
var localScope="local scope";
console.log(globalScope);//global scope
}
console.log(localScope);//undefined在函数f()内可以访问到函数体外定义的globalScope,而在函数体外不能访问到函数体内定义的localScope,这就是全局变量与局部变量的区别。
难道在函数体外就永远访问不到localScope了吗?非也,闭包就是为此而生。
function f(){
var localScope="local scope";
return function(){
console.log(localScope);
}
}
f()();//local scope我们在函数f()外访问到了局部变量localScope,这里在函数f()内定义的匿名函数就是一个闭包!