闭包的理解

闭包的描述:闭包就是能够读取其他函数内部的变量的函数。
闭包的用途:1、读取函数内部的变量。2、让变量的值一直保持在内存中。
闭包的注意点:1、闭包会让函数的变量保存在内存中,内存消耗很大。所以不能滥用闭包。(退出前将局部变量全部删除)2、闭包可以改变父函数内部的值
理论要通过实践去理解。

案例1

var name = "The Window";
var object = {
  name: "My Object",
  /*console.log(this)
  * 这时候的this将是object这个对象:{ name: 'My Object', getNameFunc: [Function: getNameFunc] }*/
  getNameFunc: function () {
    /*这时候console.log(this)
     *this将是object这个对象:{ name: 'My Object', getNameFunc: [Function: getNameFunc] }*/
    return function () {
      /*在匿名函数中console.log(this),匿名函数本身也是个闭包,这时候的this指向window
      * 输出是成片的这个:
      * { console: [Getter],
  DTRACE_NET_SERVER_CONNECTION: [Function],
  DTRACE_NET_STREAM_END: [Function],
  DTRACE_HTTP_SERVER_REQUEST: [Function],
  DTRACE_HTTP_SERVER_RESPONSE: [Function],
  DTRACE_HTTP_CLIENT_REQUEST: [Function],
  DTRACE_HTTP_CLIENT_RESPONSE: [Function],
  global: [Circular],
  process: 
   process {
     title: '/usr/local/bin/node',
等等...
*/
      console.log(this)
      return this.name;
      /* 返回this.name,全局this里根本没定义name啊。所以返回undefined*/
    };
  }
};
console.log(object.getNameFunc()());

如果想让他有输出,就全局定义object

 object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }

再来个案例

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
/*这时候的this,就是指向object这个对象,将其复制给that,目的为了给下面的匿名函数使用*/
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());

你可能感兴趣的:(闭包的理解)