扫码关注官方订阅号
详细都在图里了。。。。新学的前端 希望大神帮忙解决一下。。。谢谢
ringa_lee
感觉这已经成了闭包的经典问题。。
for(let i = 0, len = 100; i < len; i++) { (function(i){ marker[i].onclick = function(){ console.log(i); } })(i) }
不改当前结构的闭包
var callback = (function(i){ return function(e){ console.log(e) console.log(i) } })(i)
能贴代码就别贴图。。。谢谢1.callback里面没有声明的i;2.内部没有声明的i,则会在执行函数时去查找外部的i的值;3.callback执行的时候,外部循环已经走完此时i=len;4.所以看到的i都是len。
不改你的结构的话可以使用bind,但是bind低版本有兼容问题
//callback var callback = function(i,e){ console.log(e) console.log(i) } //事件绑定后面 AMap.event.addListener(marker[i],'click',callback.bind(marker[i],i))
改结构的话用 @不爱吃西红柿的鱼 提供的结构
补充闭包方式:
for(var i = 0 ;i<lis.length;i++){ (function(i){ var callback = function(e){ console.log(i) } lis[i].addEventListener('click',callback,false); })(i) }
不知道楼主现在问题解决没有,我正好也遇到同样的问题。在循环中添加addListener时,AMap.event.addListener(marker[i],'click',function(i))的最后一个函数的i,总是循环之后的值。在试着用callback.bind(i)时,没有出来结果。如果楼主以解决还请分享一下怎么改变。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
感觉这已经成了闭包的经典问题。。
不改当前结构的闭包
能贴代码就别贴图。。。谢谢
1.callback里面没有声明的i;
2.内部没有声明的i,则会在执行函数时去查找外部的i的值;
3.callback执行的时候,外部循环已经走完此时i=len;
4.所以看到的i都是len。
不改你的结构的话可以使用bind,但是bind低版本有兼容问题
改结构的话用 @不爱吃西红柿的鱼 提供的结构
补充闭包方式:
不知道楼主现在问题解决没有,我正好也遇到同样的问题。在循环中添加addListener时,AMap.event.addListener(marker[i],'click',function(i))的最后一个函数的i,总是循环之后的值。在试着用callback.bind(i)时,没有出来结果。如果楼主以解决还请分享一下怎么改变。