闭包
函数运行时形成一个私有的作用域,用来保护函数体内的变量不受外界干扰。
- 私有变量:定义在function中的变量只能在当前函数中使用
- 共有变量:定义在window作用域的变量,全局都可以使用
高程3中的解释:
- 当在函数内部定义了其他函数,就创建了闭包,闭包有权访问函数的内部的所有变量
- 闭包的小应用
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
闭包的用途
- 1、读取函数内部的变量
- 2、让这些变量的值始终保持在这个内存中
function fs(){
var num = 99;
add = function(){
num += 1;
}
return function fx(){
console.log('num的值是:',num);
}
}
var reutls = fs();
reutls()//num的值是: 99
add()
reutls()//num的值是: 100
上面这段代码中,fx函数其实就是闭包,它运行了2次,第一次的值是99,第二次的是100,这证明了在fs函数中的局部变量num,一直保存在内存中,并没有因为fs调用后自动清除。
- 通过下面的2个例子,理解下闭包的机制
var name = "this is window";
var obj = {
name : "this is obj",
getName:function(){
console.log('这里的name值是:',this.name);
return function (){
return this.name
}
}
}
obj.getName()();
var name = "this is window";
var obj = {
name : "this is obj",
getName:function(){
console.log('这里的name值是:',this.name);
var that = this;
return function (){
return that.name
}
}
}
obj.getName()();