关于闭包的终级用法

最近艾伦在研究jQuery的sizzle选择器,和我分享了一个sizzle里边关于闭包的高级用法,说它高级,是因为它用的特别巧妙,代码我们都能看明白,但是不一定能想到要这样去用闭包。然后他得意地笑了,然后说道:”现在知道为什么我坚持要看源码了吧,这样的用法,看明白了,就是你的知识积累“。不得不承认,艾伦确实是一个比较肯钻研的人。sizzle里边的闭包用法,我已经记不清了,但是那个思路我还是记下来,后面会附上自己理解后的模拟代码。

code 1:

function createClure(){
      return function cache(key,value){
                return cache[key] = value;
     }

}

var bob = createClure();
    // 传两个参数时,进行赋值
     value =  bob(‘para‘,‘test‘);

    // 传一个值时,进行取值

   value = bob[‘para‘]

code 2 :

(function(){
   var cache = [];
   var rubbit =  ‘music‘;

     function(){
            //这里可以直接引用前面的cache
            cahce.push(‘hash‘);
            rubbit += ‘enjoying‘;

    }

})()

//常规的用法
var fun = function(){

    return function(cahe,rubbit){
            cahce.push(‘hash‘);
            rubbit += ‘enjoying‘;

    }

};
//待执行的函数
var fun2 = fun();
//需要传递的参数
var cache = [111,222];
var rubbit = ‘white‘;
//执行调用
fun2(cache,rubbit);

相比起常用法,前面的闭包,可以直接取到需要变量,省了一些中间传递的过程,使的代码更优雅。当然,还有一个重要的好处,就是减少回调函数,只不过我这里的代码没有体现这一点。这些感受,也许你看了还不是很明白,不要紧,全当做是一个提醒好了。如果你在今后的项目中用到有很深的回调,以及零乱的调用关系的时候,能够想到这里,有一种灵光闪现的感觉,我就觉得很欣慰了。

关于闭包的终级用法

时间: 2024-10-22 19:26:23

关于闭包的终级用法的相关文章

新手在前期应该如何发“外链”(4)之终级外链法

在前三篇文章中讲了一些关于外链的根本知识与怎么识别如何是高质量外链,只是怎么有站长朋友在论坛中评论说,的确说的很好,但是还是不知道如何发外链,那么今天我就总结一下自己在前三天谈及到的做一个小小的总结,在用一个自己发外链的实际案例来说明我是如何对我现在公司经营的产品如何发外链的. 好了费话不多说,直接进入主题吧!这个网站的定位有点杂(公司需要),标题是:进口奶粉_进品食品加盟_[]那么从标题就可以看出,我们这个网站主要做进口奶粉以及进口食品加盟这两个关键词,那么首先我用我之前发外链找平台的方法,先

新手在前期应该怎样发“外链”(4)之终级外链法

在前三篇文章中讲了一些关于外链的根本知识与怎么识别怎样是高质量外链,仅仅是怎么有站长朋友在论坛中评论说,的确说的非常好,可是还是不知道怎样发外链,那么今天我就总结一下自己在前三天谈及到的做一个小小的总结,在用一个自己发外链的实际案例来说明我是怎样对我如今公司经营的产品怎样发外链的.       好了费话不多说,直接进入主题吧!这个站点的定位有点杂(公司须要),标题是:进口奶粉_进品食品加盟_[]那么从标题就能够看出,我们这个站点主要做进口奶粉以及进口食品加盟这两个关键词,那么首先我用我之前发外链

【Tips】史上最全H1B问题合辑——保持H1B身份终级篇

[Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您掌握最新留学资讯. 成功申请了H1B后可不是就万事大吉了哦,如何保持H1B身份也是需要掌握的秘籍.本次的终极篇教你如何保持H1B身份.搞定H1B转换.以及未来的职业移民申请该如何操作. 保持H1B身份终级篇 1 保持H1B身份 1.问:在H1B达到六年期限以后,如何才能申请继续延期? 答: H1B首

PowerShape 2017 64位无限制终级版+FeatureCAM

AutoDesk(原delcam)PowerShape 2017 64位无限制终级版Autodesk(Delcam) FeatureCAM 2017 64位中文旗舰版 AutoDesk (原delcam) PowerShape 2017 64位为多国语言版本,支持的语言有:英文.法文.德文. 意大利文.日文.葡萄牙文.俄文和西班牙文(简体中文版待更新).是专业的冲压模具准备设计分析工 具,主要为加工制造准备复杂的CAD模型. Ranorex.Studio.v5.0.3.18203 GUI自动测试

IO 流之 FileInputStream 终级版

FileInputStream 终级版 文件名称:text 文件内容: public static void Main(String[] args){ System.out.println("Hello, World!"); } 代码: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * 一次读取多个字节 */ public cla

javascript中闭包的原理与用法小结(转)

一.在javaScript中闭包的五种表现形式如下: 1 /** 2 * Created by admin on 2016/12/26. 3 *//* 4 //向函数对象添加属性 5 function Circle(r){ 6 this.r=r; 7 } 8 Circle.prototype.PI=3.1415926; 9 Circle.prototype.area=function(){ 10 return this.PI*this.r*this.r; 11 }; 12 var c=new C

【转】C语言宏高级用法 [总结]

1.前言  今天看代码时候,遇到一些宏,之前没有见过,感觉挺新鲜.如是上网google一下,顺便总结一下,方便以后学习和运用.C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参.宏的简单应用很容易掌握,今天主要总结一下宏的特殊符号及惯用法. (1)宏中包含特殊符号:#.##.       (2)宏定义用do{ }while(0) 2.特殊符号#.## (1)# When you put a # before an argumen

JavaScript闭包的概念及用法

1.闭包的概念: 闭包就是能够读取其他函数内部变量的函数. 例如: function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 其中f2函数就是闭包. 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成"定义在一个函数内部的函数". 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁.2.

js闭包的理解与用法

js回收机制:当一个函数全部执行完毕或者返回了值的时候,函数里面的变量会被清除回归到初始状态. 在某种情况: js这样的回收机制就会引出一个问题,当一个函数被执行完毕后cg了,然而在函数外的一个变量需要用调用该函数里面的值时就不能有想要的效果了 例子: 分析 for循环第一次 i 等于0的时候,传递给result的值是0,但是第二次执行时候result被cg了,i没记住值0,i直接变1了,下一次也一样. 1 var result=[]; 2 function foo(){ 3 var i= 0;