这几天晚上回到家里没闲着,在网上找了本书,终于弄明白自己一直半懂且不懂装懂的一件事情。
那就是闭包与作用域的事情,想想前两天写的日志,虽然当时自己用另外一种方式处理了。即借用于中间函数,不过始终是脱离了自己原来预想的闭包实现法。既然偶有所感,不如改写一下。
改写后,代码如下,果然精悍了很多。
var payTypes = ['snda', 'junnet', 'szx'];
for (var i = 0, len = payTypes.length; i < len; i++) {
(function(payTypeName){
var Radios = document.getElementsByName(payTypeName + "_amount");
for (var j = 0, rLen = Radios.length; j < rLen; j++) {
Radios[j].onclick = function(){
payObj.changePaytype('pay_' + payTypeName, this.value);
}
}
})(payTypes[i]);
}
for (var i = 0, len = payTypes.length; i < len; i++) {
(function(payTypeName){
var Radios = document.getElementsByName(payTypeName + "_amount");
for (var j = 0, rLen = Radios.length; j < rLen; j++) {
Radios[j].onclick = function(){
payObj.changePaytype('pay_' + payTypeName, this.value);
}
}
})(payTypes[i]);
}
所以说,天道酬勤,付出总是会有回报的。能否写出这个代码并不重要,背下来也可。但是弄明白其真正原理,这才是我最大的收获。
有点装B了,但是人在世上混,哪能不流氓,哪能不装B?都在世上飘,难免会挨刀。
发表评论
我顿时成为盲人
[回复]
只要有B 别人是不知道是真有还是装出来的,哈哈
[回复]
哎,看着这些我就头疼
[回复]
@要饭的
其实我看着也头疼,这玩意总盯着,总想着,是会晕菜的。
[回复]
@阿邙
和你的名字对应了嘛。呵。
[回复]
@久酷
呵呵,说的好,只要有B别人是不知道咋来的。哈哈哈。
[回复]
技术流。
[回复]
哎。。我的付出。也不知道什么时候 才会有回报啊。 !哎。痛苦。
[回复]
最近再看古惑仔~~你懂的
[回复]
技术牛人啊
[回复]
七夕过的好嘛~~ 我上图了!
[回复]
@小粥
呵呵,很温暖,很Happy。我过去看图。哈。
[回复]
内个- – . 讲讲什么意思呀… 光列个代码- – 不懂ing………..
[回复]
@wclssdn
呵呵,文中有体现的哦,只是说我用下面这段代码,来解决了前几天遇到的问题。呵~~
[回复]
不懂ing… 记得内天我也写了一小段程序.. 想用JS判断指定区域内的图片是否失效了.. 如果失效了. 累加失效图片个数..
貌似我这么写的..
var all = $(“#content img”).length;
var error = 0;
$(“#content img”).each(function(){
$(this).error(function(){
});
});
[回复]
汗- – . 我还没写完呢- – . 怎么就提交了呢- – .
继续..
不懂ing… 记得内天我也写了一小段程序.. 想用JS判断指定区域内的图片是否失效了.. 如果失效了. 累加失效图片个数..
貌似我这么写的..
var error = 0;
$("#content img").each(function(){
$(this).error(function(){
++error;
alert(error); //每次弹出error+1
});
});
alert(error); //此处error=0
貌似就是有闭包的问题在里边吧? 可惜我不懂闭包.. 如果有空. 还请赐教… 谢啦“
[回复]
@wclssdn
不太了解jQ的each和error方法,我怀疑是error方法里面的处理过程不一致导致的。
稍候,我给你发邮件,把我写的demo,发给你一份。。嗯。
[回复]
@wclssdn
已经给你发邮件了,请查收,希望我的解释你可以看懂。写的比较乱,呵呵。
自己多试几次,你就会发现,error是异步调用,或者是延迟调用?总之他发生的情况是需要去检测这些代码有没有问题,有问题才会触发函数,因为each是callback的error事件。
所以,其更改error值时,外面的已经先调用完了,注意alert的顺序,方法外的alert是先发出的。
所以,你用setTimeout去试一下,就会发现,你这个不涉及到闭包,error确实是被更改了的。嗯。
[回复]
alert(error);
},5000);
也就是说.. 当所有图片都加载完毕后.. error的值不是0了?
因为each是callback的error事件。 这句还是很迷糊- – ..
不过. 谢谢啦. 哈哈“`
[回复]
呵呵
刚刚又仔细的看了下你发的邮件… 应该算是理解了一点“`
貌似是 图片没加载完.. js是不会调用error 这个函数的是吧..
而我在没有加载完图片的时候. 就用了error 所以它没被更改. 所以还是0 . …
唉.. 我太菜咧- – … 哈哈哈“ 再次谢过.“`
[回复]