从javascript的两个例子谈开

简介:

今天是研究javascript的闭包问题,看到这么一个非常好的文章

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20110419152835

文章最后留了两个题目:

如果你能理解下面两段代码的运行结果,应该就算理解闭包的运行机制了。

代码片段一。

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()());

这两个例子相当精简

这里记录下对这两个例子的理解:

理解最后两个例子:

1 函数中的this指的是调用这个函数的owner 
2 object.getNameFunc()是返回一个函数,并没有执行函数中的代码 
3 增加一个例子0: 
var name = "The Window"; 
 var object = { 
 name : "My Object", 
 getNameFunc : function(){ 
return (this.name); 
 } 
 }; 
var name = object.getNameFunc(); 
 alert(name);

4 把例子1变成 
 var name = "The Window"; 
 var object = { 
 name : "My Object", 
 getNameFunc : function(){ 
 return function(){ 
 return this.name; //这个this是有上下文的限制的 
 }; 
 } 
 }; 
var tmp = Object.getNameFunc(); //此时没有执行this.name 
var name = tmp();//这个时候才执行,这时候的this上下文为全局 
alert(name); 
//alert(object.getNameFunc()())

5 把例子2变成: 
var name = "The Window";

var object = { 
 name : "My Object",

getNameFunc : function(){ 
 var that = this; 
 return function(){ 
 return that.name; 
 }; 
 } 
 }; 
var tmp = Object.getNameFunc(); //这个时候执行了that = this,这里的this上下文是object,所以that指的是object 
var name = Object.getNameFunc(); //这个时候执行了that.name 
alert(name); 
//alert(object.getNameFunc()());

这里面最难理解的应该是this的上下文




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2011/04/19/2021018.html,如需转载请自行联系原作者

相关文章
|
JavaScript 前端开发
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
103 2
|
25天前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
17 0
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
146 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
89 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
79 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
99 4
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
89 3
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
72 3
下一篇
DataWorks