闭包,是一个作用域.
简单的讲,函数套函数,父函数里面的子函数,就是闭包.
任何一个函数都是一个闭包.
function a(){
console.log('这个a函数,就是一个闭包.')
}
闭包的特性:
1. 函数内部可以读取全局变量;
2. 函数外部不能读取函数内部的变量.
父函数不能读取子函数的变量.
父函数读取子函数里面的变量,要使用return.
function a(){
var a1 = 1; // 私有变量
function b(){
var b = a1 + 1;
console.log(b)
}
return b;
}
var s = a();
s();
则其实就是变量作用域.
闭包的用途:
1. 用来定义"私有方法"和"私有变量"
这种私有方法和变量,在外部无法访问
function obj(){
var x = 1;
function get(){
console.log(x);
}
this.get = get;
}
obj.prototype = {
a:function(){
console.log('aaaa')
}
}
var s = new obj();
s.get();
obj 是一个对象,同时也是一个函数,当添加了 prototype 的时候,它也是构造器,它有一个私有方法 get,用来访问它自己内部的变量 x.