学习闭包的好文章:
1. 阮一峰: 学习Javascript闭包(Closure) http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
留了一个题:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function() {
return function(){
return this.name;
};
}
};
能理解答案了吧?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2. mozilla的js guide https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Closures
引用
Emulating private methods with closures
var Counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
})();
alert(Counter.value()); /* Alerts 0 */
Counter.increment();
Counter.increment();
alert(Counter.value()); /* Alerts 2 */
Counter.decrement();
alert(Counter.value()); /* Alerts 1 */
看懂这个例子:
<p id="help">Helpful notes will appear here</p>
<p>E-mail: <input type="text" id="email" name="email"></p>
<p>Name: <input type="text" id="name" name="name"></p>
<p>Age: <input type="text" id="age" name="age"></p>
function showHelp(help) {
document.getElementById('help').innerHTML = help;
}
function setupHelp() {
var helpText = [
{'id': 'email', 'help': 'Your e-mail address'},
{'id': 'name', 'help': 'Your full name'},
{'id': 'age', 'help': 'Your age (you must be over 16)'}
];
for (var i = 0; i < helpText.length; i++) {
var item = helpText[i];
document.getElementById(item.id).onfocus = function() {
showHelp(item.help);
}
}
}
上面这段JS为什么不能达到预期效果,要改成下面这样才对!
function showHelp(help) {
document.getElementById('help').innerHTML = help;
}
function makeHelpCallback(help) {
return function() {
showHelp(help);
};
}
function setupHelp() {
var helpText = [
{'id': 'email', 'help': 'Your e-mail address'},
{'id': 'name', 'help': 'Your full name'},
{'id': 'age', 'help': 'Your age (you must be over 16)'}
];
for (var i = 0; i < helpText.length; i++) {
var item = helpText[i];
document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
}
}
引用
This works as expected. Rather than the callbacks all sharing a single environment, the makeHelpCallback function creates a new environment for each one in which help refers to the corresponding string from the helpText array.
利用 let 关键字也可以解决(block level scope)
for (var i = 0; i < helpText.length; i++) {
let item = helpText[i];
document.getElementById(item.id).onfocus = function() {
showHelp(item.help);
}
}
一定要想明白这个例子!
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3. Secrets of JavaScript closures http://www.kryogenix.org/code/browser/secrets-of-javascript-closures/
解释得很详实,还有视频。
ppt下载
http://www.crockford.com/javascript/private.html 这里有关于js private的英文说明
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4. 闭包的秘密 http://www.gracecode.com/archives/2385/
对上面那篇英文文章的补充。
修改之后的ppt在box.net下载不下来。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5. 理解 JavaScript 闭包 为之漫笔翻译的 http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html
原文在 http://www.jibbering.com/faq/faq_notes/closures.html
这个版本也不错 http://www.cn-cuckoo.com/wordpress/wp-content/uploads/2007/08/JavaScriptClosures.html
另外推荐的另一篇js基础知识的文章也很值得精读 http://www.cnblogs.com/RicCC/archive/2008/02/15/javascript-object-model-execution-model.html
分享到:
相关推荐
在深入讨论JavaScript闭包之前,首先需要了解JavaScript的变量作用域。在JavaScript中,变量的作用域分为两种:全局变量和局部变量。全局变量是在函数外部定义的变量,可以在JavaScript程序的任何地方被访问。局部...
也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 的附录,发现附录A对JavaScript的闭包的介绍简单易懂,于是借花献佛总结一下。 1、定义 闭包:...
本教程将深入讲解如何使用XMLHTTPRequest来实现自定义的Ajax请求,并探讨JavaScript的闭包模式。 首先,让我们理解XMLHTTPRequest对象的工作原理。它主要有五个状态(0-4),分别代表不同的通信阶段。状态0表示请求...
描述:详细描述JavaScript闭包,适合更进一步了解闭包。 标签:javascript 闭包 从给定的文件信息来看,主要围绕JavaScript中的闭包概念进行深入探讨。闭包是计算机科学中一个重要的概念,特别是在函数式编程语言...
以下是我对这本书学习的总结: 1. **变量与数据类型** JavaScript中的变量是动态类型的,可以随时更改其数据类型。基本数据类型包括:Number、String、Boolean、Null、Undefined以及Symbol(ES6新增)。此外,还有...
JavaScript学习总结 JavaScript是一种解释型的脚本语言,主要应用于Web应用开发,尤其在HTML网页中,它赋予网页动态功能,使得用户体验更加丰富。早期JavaScript主要用于简单的网页特效,如表单验证和浮动广告,但...
这份名为“JavaScript必看全面总结.zip”的压缩包文件包含了一份深入的JavaScript学习笔记,旨在帮助开发者全面掌握这一动态类型的脚本语言。以下是根据标题和描述提炼出的JavaScript关键知识点: 1. **基础语法**...
总结,JavaScript 闭包是理解和掌握 JavaScript 高级编程的关键之一。它提供了访问和操作外部作用域的能力,有助于实现模块化、封装和持久化变量等功能。然而,使用不当也可能带来内存问题,因此在使用闭包时需谨慎...
在“javascript学习总结中(二)”这篇博文中,作者主要分享了JavaScript编程中的关键概念和技术,这对于我们深入理解和应用JavaScript至关重要。JavaScript是一种广泛用于网页和应用程序开发的脚本语言,它赋予网页...
通过对标题《js闭包学习心得总结》的阅读和理解,我们可以了解到闭包定义、闭包的创建条件以及闭包的应用场景和在实际编码中可能遇到的问题。 闭包定义: 闭包(Closure)是函数和声明该函数的词法环境的组合。这...
【张孝祥JAVASCRIPT笔记图片总结】是一份由知名IT讲师张孝祥编写的JavaScript学习资料,主要以图片的形式呈现,旨在帮助学习者更直观、清晰地理解和记忆JavaScript的关键概念与技术点。这份笔记涵盖了JavaScript的...
本篇内容将围绕"JavaScript总结导图"展开,深入探讨JavaScript的基础知识、核心概念以及高级特性。 1. **基础语法** JavaScript的基础包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、...
在压缩包中还有一个名为"Javascript学习"的文件,可能是另一份文档或电子书,它可能与"10步学习 JavaScript.pdf"相辅相成,提供不同角度的解释或更深入的内容,比如面向对象编程、闭包、模块化、Promise和async/...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现客户端的交互效果和动态功能。在JavaScript的学习过程中,有...随着学习的深入,还会涉及到事件处理、Ajax异步通信、闭包、模块化等高级主题。
JavaScript是Web开发中不可或缺的一部分,尤其对于前端开发者来说,它的重要性不言而喻。这篇总结涵盖了...掌握这些基础知识,将为后续深入学习JavaScript对象、原型链、闭包、异步编程等高级主题奠定坚实基础。
本文将围绕“JavaScript知识点总结(思维导图10张)”进行详细解析,涵盖从基础语法到高级特性,帮助你构建完整的JavaScript知识体系。 1. **JavaScript操作符与字符** (Javascript-operational-character.gif) - ...
这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...
在深入学习JavaScript时,理解和掌握函数是至关重要的,因为它们是组织代码、执行特定任务的基本单元。 函数在JavaScript中扮演着核心角色,允许我们将代码封装到可重用的块中。创建函数有两种主要方式:函数声明和...