1、如何从外部读取局部变量
eg:
function f1(){
n = 999;
function f2(){
console.log(n);//999
}
}
解读:f1内部所有变量对f2可见,但f2内部局部变量对f1不可见。子对象会一级一级向上寻找所有父对象的变量。
function f1(){
var n = 999;
function f2(){
console.log(n)
}
return f2;
}
var result = f1();
result();//999
2、闭包的通俗定义
闭包就是能够读取其他函数内部变量的函数,而在javascript中只有函数的子函数才能读取局部变量,所以可以定义闭包的概念:定义在一个函数内部的函数。
闭包的作用:
a、读取函数内部的变量
b、让变量的值始终保存在内存中
eg:
function f1(){
var n = 999;
nadd = function(){
n = n+1;
}
function f2(){
console.log(n)
}
return f2;
}
var result = f1();
result();//999
nadd();
result();
解读:result实际上闭包了函数f2、局部变量一直在内存中,因为f2调用后并没有将变量n销毁,值一直存在,所以必须注意内存的消耗。