闭包可以用优雅的方式来处理一些棘手的问题,有些程序员声称没有闭包简直就活不下去了。这虽然有些夸张,却从侧面说明闭包有着强大的功能。下面列举了一些闭包应用。
1、通过闭包修正事件注册时的this指针
button1.onclick =(function(owner){returnfunction({button1_click.apply(owner,arguments)}})(button1);
<!---->
2、利用闭包加强模块化
闭包有益于模块化编程,它能以简单的方式开发较小的模块,从而提高开发速度和程序的可复用性。和没有使用闭包的程序相比,使用闭包可将模块划分得更
小。比
如我们要计算一个数组中所有数字的和,这只需要循环遍历数组,把遍历到的数字加起来就行了。如果现在要计算所有元素的积呢?要打印所有的元素呢?解决这些
问题都要对数组进行遍历,如果是在不支持闭包的语言中,我们不得不一次又一次重复地写循环语句。而这在支持闭包的语言中是不必要的.

var sum=0;
function each(array,callback){
var i=0,length=array.length;
for(var v=array[0];i<length;i++){
v=array[i];
callback.call(v,i,v);
}
return array;
}
each(n,function(i,o){
sum=sum+o;
});
each(n,function(i,o)){
sum=sum*o;
}
<!---->
3、抽象,闭包是数据和行为的组合,这使得闭包具有较好抽象能力,下面的代码通过闭包来模拟面向对象编程的单例模式。
<!---->
MyNamespace.Singleton=(function(){
//private methods
var privateAttribute1=false;
var privateAttribute2=true;
function privateMethod(){
}
return {//public members
publicAttribute1:true,
publicAttribute2:10,
method1:function(){
},
method12:function(){
}
}
})();

大家还有什么新的应用,可以分享下
分享到:
相关推荐
闭包的应用非常广泛,以下是一些常见的应用场景: ##### 例1:为函数引用设置延时 利用闭包可以很容易地实现函数的延时执行,例如: ```javascript function delay(fn, ms) { setTimeout(fn, ms); } delay...
在IT领域,尤其是在地理信息系统(GIS)和计算机图形学中,"凸闭包收缩法"是一种用于构建"DTin_tin三角网"的技术。本文将深入探讨这一方法以及与其相关的"whileq3u"算法。 首先,让我们了解什么是DTin(Digital ...
总的来说,闭包在Java中的应用广泛,常用于回调函数、事件处理器、函数式编程等场景,能够提供一种封装和传递行为的方式,使代码更加模块化和可复用。然而,使用闭包时必须谨慎处理内存管理,防止出现不必要的内存...
虽然闭包和迭代器是 Rust 中零成本抽象的一部分,但在实际应用中仍然需要考虑性能问题。 1. **移动闭包**: - 当闭包捕获变量的所有权时,需要注意性能影响。例如: ```rust let data = vec![1, 2, 3]; let ...
JavaScript是一种强大的动态编程语言,广泛应用于网页开发和前端应用程序。在JavaScript中,面向对象编程(OOP)是一种关键的编程范式,它基于类、继承和封装等概念。本篇文章将详细阐述JavaScript中的面向对象技术...
这些模式在实际开发中有着广泛的应用,例如单例模式常用于管理数据库连接、工厂模式可以用于创建多种相似的UI组件,观察者模式则在实现响应式编程时大放异彩。 总结来说,JavaScript设计模式作为前端开发的基石之一...
在JavaScript中,面向对象编程(Object-Oriented Programming, OOP)是一种常见的编程范式,但与传统的C++或Java有所不同。JavaScript并没有采用类(Class)的概念,而是基于原型(Prototype)来实现对象的继承和...
这个"JavaScript技巧收集.7z"压缩包很可能是包含了一系列关于JavaScript编程的实用技巧、代码片段或者示例项目。尽管没有具体的标签提供额外信息,我们可以从常见的JavaScript知识点出发,来探讨一些重要的概念和...
在张硕的这篇论文中,作者详细探讨了模糊聚类在学生素质评价中的应用,通过对模糊等价关系的聚类方法的介绍,建立了相应的数学模型,用以提高学生素质评价的准确性和便捷性。 首先,模糊聚类分析方法属于无监督学习...
在离散数学中,**关系**是集合间的重要联系方式之一,而关系的闭包则是对原有关系进行某种性质扩展后的结果。给定一个集合\( A \)上的二元关系\( R \),可以通过添加某些有序对来获得该关系的闭包。 1. **自反闭包*...
在机械故障模式识别中,需要收集包括机器正常工作以及出现故障时的运行参数,包括但不限于温度、振动、噪声、电流、电压等参数,以及故障的类型。这些数据构成了故障模式识别的数据样本集,数据挖掘技术将在此基础上...
在实际应用中,闭包常用于代替全局变量,通过在函数内部创建和返回一个函数,可以确保内部变量只在需要的时候才被访问。此外,它还能在循环中用来绑定特定的值,如在为多个元素绑定事件处理函数时,确保每个函数都...
在本资源中,“iOS 8 应用开发基础 源代码”提供了使用Xcode 6.2(Swift 1.1)进行iOS应用开发的基础示例。这是一份宝贵的资料,适合初学者和有一定经验的开发者,他们希望了解如何在iOS 8环境下构建应用程序。以下...
本资料“python中返回函数共4页.pdf”似乎详细介绍了Python中的函数,特别是关于返回函数的知识,这将涵盖函数定义、返回值、闭包以及装饰器等重要概念。 1. **函数定义**:在Python中,通过`def`关键字定义函数,...
3. **异步编程**:理解事件循环、回调函数、Promise、async/await,以及它们在处理I/O操作和网络请求中的应用。 4. **原型与继承**:JavaScript的面向对象特性体现在原型链上,理解如何通过原型实现继承和方法共享...
通过编译Squirrel 3.0源代码,你可以获得一个动态链接库(`.dll`)和一个头文件(`.h`),这将使你在自己的应用程序中嵌入Squirrel变得简单。只需包含相应的头文件,链接库文件,并调用提供的API,就可以在你的应用...
在这个"JavaScript常用函数数、常用正则表达式收集___下载.zip"压缩包中,我们可以预见到一系列与JavaScript相关的实用工具函数和常用的正则表达式模式。 首先,让我们来探讨JavaScript中的常用函数。在JavaScript...
这个压缩包"JavaScript_收集前端挑战的学习和面试.zip"显然包含了帮助学习者提升JavaScript技能和准备面试的资源。其中,"frontend-mini-challenges_main.zip"可能是一个包含一系列小型前端编程挑战的项目,而"说明....
3. **专业工具**:"Memory Leak.zip"中的工具可能包括了专门用于检测JavaScript内存泄漏的工具,如`memwatch-next`、`heapdump`等,它们可以帮助开发者更精确地定位内存泄漏源。 4. **代码审查**:定期进行代码审查...