关于JS的闭包

王朝学院·作者佚名  2016-05-22
窄屏简体版  字體: 小  |  中  |  大  |  超大  

关于JS的闭包

首先关于闭包的理解。

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

摘自阮一峰博客的例子

代码片段一。

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航