首页 > 代码库 > 关于闭包的终级用法
关于闭包的终级用法
最近艾伦在研究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);
相比起常用法,前面的闭包,可以直接取到需要变量,省了一些中间传递的过程,使的代码更优雅。当然,还有一个重要的好处,就是减少回调函数,只不过我这里的代码没有体现这一点。这些感受,也许你看了还不是很明白,不要紧,全当做是一个提醒好了。如果你在今后的项目中用到有很深的回调,以及零乱的调用关系的时候,能够想到这里,有一种灵光闪现的感觉,我就觉得很欣慰了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。