先看看他《JavaS高级程序设计》在里面的定义
闭包(closure)指有权访问另一个函数作用域的变量的函数
可知闭包(closure)就是一个函数,可通过闭包访问某些函数里面的变量,且被访问的那个变量所属的函数就是一个闭包(closure)
function fn(){ //一个闭包(closure),a被函数f访问
var a=10;
f();
function f() {
console.log(a); //输出10
}
}
fn();
在Chrome里面调试的图:
实例1:
function fn(){ //一个闭包
var a=100; //局部变量
function f() {
console.log(a);
}
return f; //返回一个函数,所以fn也是一个高阶函数
}
var ff=fn();
ff(); //这样就实现了在全局作用域下访问了局部作用域的变量
闭包的主要作用:扩大了变量的作用范围
实例2:
var uname='window';
var object={
uname:'object',
funct:function () {
return function () {
console.log(this); //this指向window对象
return this.uname; //打印出 window字符串
};
}
};
console.log(object.funct()()); //没有闭包
实例3:
var uname='window';
var object={
uname:'object',
funct:function () { //是一个闭包
var that=this; //this指向object对象
return function () {
console.log(this); //this指向window对象
return that.uname; //打印出 object字符串
}
}
};
console.log(object.funct()());
本文只用于个人学习和记录