js循环里进行回调,引用循环里的变量,发现只是最后值的问题

varx=200;varb_y=200;$(document).ready(function(){for(vari=0;i<100;i++){b_y+=40;$("#La... var x=200;
var b_y=200;
$(document).ready(function(){
for(var i=0;i<100;i++){
b_y+=40;
$("#Layer4").animate({top:b_y+'px'},1000);
$("#bg1").click(function(){
b_y-=120; //b_y等于b_y减去120;
alert(b_y);
})
}
})

我想实现 每次b_y增加40,但当单击鼠标时减少120,但弹出的结果总是是40*100-120;
展开
 我来答
百度网友7234f06a
推荐于2018-05-11 · TA获得超过119个赞
知道答主
回答量:29
采纳率:0%
帮助的人:23.4万
展开全部
这是一个经典的用闭包来解决的案例,在javascript中,没有块级作用域,只有函数作用域,也就是说在执行一个函数的时候会新开辟内存空间,click方法必须要点击的时候才能会调用,但是for循环已经执行完毕,i等于最后一个值,所以当点击的时候总是最后一个。要解决这个问题,就需要保存外层函数的执行作用域,也就是用闭包来解决。你可以去搜索相关知识,网上很多。还有一种偷懒的办法,给元素添加一个index属性保存你要用的值,然后直接从属性中取得。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式