闭包是一个函数

闭包允许将函数与其所操作的某些数据关连起来。 定义在闭包中的函数会关联被创建时候的环境。


function Tips() {
  var name = "hello world";
  function say() {
    console.log(name);
  }
  return say;
}

var tips = new Tips();
tips(); // hello world

//这里 say  name 都是 Tips 的内部函数与变量, 但是 say 在执行期间
//返回给了外围。这样做后执行 tips 就能访问到 Tips 内部的变量 name


Examples-1


function Person (name,age,sex) {
    this.getName = function(){
        return name;
    };
    this.setName = function(value){
        name = value;
    };
    this.getAge = function(){
        return age;
    };
    this.setAge = function(value){
        age = value;
    };
    this.getSex = function(){
        return sex;
    };
    this.setSex = function(value){
        sex = value;
    };
    return this;
}
function Group(){
    Person.apply(this,arguments);
    return this;
}
var group = new Group("张三","20","男");
group.getName() // 张三
group.getAge()  // 20
group.getSex()  // 

group.setName("李四")
group.getName() // 李四

//这里 Person 中的 name,age,sex 几个变量,外部无法直接使用的, 
//只有通过暴露出去的 get / set 方法进行读取与修改


Examples-2


var count = (function(){
    var index = 0;
    return function(){
        return index ++;
    };
})();

count(); // 0
count(); // 1
count(); // 2