闭包是什么 闭包有什么用
js没有块级作用域 全局变量和局部变量
闭包 就是定义在函数内部 能读取函数内部变量的函数 的函数
闭包是为了解决函数内部与外部的通讯问题
function f1(){
var a=1;
function f2(){
console.log(a);
}
return f2;
}
function f1(){
var a=1;
return function f2(){
console.log(a);
}
}
a //1
f2()() //1
f2为f1内部的函数 f2能读取f1内的说有变量 而f1不能读取f2内的变量 f1内定义一个f2,把f2返回出来,相当于把f2所处的【链式作用域】返回到外部 f1外部
function f1(){
var a=1;
add=function(){ //全局变量add?
a+=1;
}
return function f2(){
console.log(a);
}
}
var result=f1(); //把f2保存到result中
result(); //f1()() 1
add();
result(); //2
add是一个匿名函数,匿名函数本身就是一个闭包,相当于一个setter result实际上是函数f2,所以f2被保存到内存中,而f2用到f1的变量a所以f1被保存到内存中
var name="the window";
var object={
name:"the object",
getName:function(){
return function(){
return this.name //这里的this是有上下文的
}
}
}
console.log(object.getName()());
//console.log(){
// function(){
// return this.name
// }
//}
var name="the window";
var object={
name:"the object",
getName:function(){
var that=this
return function(){
return that.name
}
}
}
console.log(object.getName()());
//console.log(){
// function(){
// return that.name
// }
//}
var name="the window";
var object={
name:"the object",
getName:function(){
return this.name;
}
}
object.getName() //the object