学前须知: js 的作用域 以及作用域链
作用域: 定义并使用变量的区域。
作用域链:沿着作用域逐级向上查找的过程。
egg:
var n=999;
function f1(){
alert(n);
}
f1(); // 999
此时调用函数,函数内部会访问函数外部的变量这一过程便是函数的作用域链
egg: function f1(){
var n=999
}
alert(n) // error n is not defined
f1()
此时无法访问f1 中的变量 n 如果想要访问就得使用 闭包 !!!
eg: 使用闭包读取函数内部变量 并返回
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
f1() // 999
注意:此时f2 函数就是闭包函数 所访问的 n 变量会留在内存中
总结: 闭包的用途: 读取函数内部变量,并使该变量存贮在内存中 (闭包要谨慎使用)