闭包问题?
function bibao(i){
return function(e){
deleteS(i);
}
}
for(var i=0;i<freshdreamdata.length;i++){
document.write("<li><a href='javascript:location.reload()' onmousedown='bibao(i)'>" + freshdreamdata[i] + "</a></li>");
}
貌似闭包写的方法不对,一直不显示deleteS效果
有人说不是闭包问题?如果不用闭包,直接onmousedown='deleteS(i)'则不显示任何效果
如在for里加上_i=this.i,则只出最后一个i的数值。
还有人说要写成bibao('+i+'),汗我不懂为什么要那么写,总之好像还是没有效果
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
楼主的代码里有很多我看不懂的地方,我据姑且的认为楼主想要实现这么一个效果:
有个存储数据的数组freshdreamdata,生成一个列表,列表里的内容与freshdreamdata一一对应。当用户点击列表里的项目时就调用deleteS并将项目的号码传递给它。
一开始楼主肯定会这样写
生成的html大概是这样
当楼主点击这些可爱的链接的时候,就发现没有用。这是为什么呢?因为html解析器不知道'deleteS(i)'其中的i表示什么意思。楼主应该这样写才对:
以上内容均不涉及闭包。如果楼主你想要闭包的话。。也可以。我们就用创建DOM的方法来实现这个功能。
很多新手都会这样写,看上去好像没什么问题,但当实际操作的时候就会发现传入deleteS里的i值总是一个定值,不管点击哪个链接,删除的都是最后一个。
这个时候就需要闭包了。
目测楼主基本功不够扎实,上面我就先告诉个结果,其中道理自己细细品味。