首页 > Web开发 > 详细

关于JS的闭包

时间:2015-03-24 01:10:46      阅读:358      评论:0      收藏:0      [点我收藏+]

 

首先关于闭包的理解。

个人认为,闭包是定义在局部变量的语境中,能获取该语境中所有变量的函数。

摘自阮一峰博客的例子

代码片段一。

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){
        return this.name;
      };

    }

  };

  alert(object.getNameFunc()());


代码片段二。

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());

第一个例子输出"The Window"; 第二个例子输出 "My Object"

下面分析一下两个例子的不同之处,首先理解this是代码被执行时的环境 第一个例子中执行的是全局的this 第二个例子执行的是object的this

换句话说,第一个例子之所以输出"The Window" 是因为object里面的代码完全没有被执行

其实很容易理解,第一个例子中object.getNameFunc()返回的是匿名函数,这个函数中没有使用object的变量 所以并不属于object的成员 因而是全局的成员 所以返回的this就是全局的this

第二个例子中,var that = this;发生在object的语境中,所以返回的是object的this

关于JS的闭包

原文:http://www.cnblogs.com/Mistlion-alex/p/4361358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!