首页 > 代码库 > 关于闭包的终级用法

关于闭包的终级用法

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

code 1:

function createClure(){      return function cache(key,value){                return cache[key] = value;     }}var bob = createClure();    // 传两个参数时,进行赋值     value =  http://www.mamicode.com/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);

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