var name = 'www';
console.log(name);
function father(){
var name = 'qqq';
function sub(){
console.log(name);
}
}
如上代码段,值为‘www’的name是全局变量,而在函数father中有一个只在该函数中生效的局部变量,因为var是函数作用域,函数外无法直接用函数内的变量及方法,要调用father函数,才能获取到‘qqq’的name及sub方法。
但有时会需要在全局作用域中获取局部作用域,这时就需要闭包,根据作用域链,只要获取sub即可获取到father的作用域,如同在sub中可以获取到‘qqq’的name。
解决办法就是在father中将sub返回出去,这样,在全局调用father后,就会获得sub函数,再执行sub函数即可打印father的name。
var name = 'www';
console.log(name);
function father(){
var name = 'qqq';
return function sub(){
console.log('name:'+name);
}
}
father()();
闭包的使用场景:
函数节流防抖等。