functionbibao(i){returnfunction(e){deleteS(i);}}for(vari=0;i
2 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
楼主的代码里有很多我看不懂的地方,我据姑且的认为楼主想要实现这么一个效果:有个存储数据的数组freshdreamdata,生成一个列表,列表里的内容与freshdreamdata一一对应。当用户点击列表里的项目时就调用deleteS并将项目的号码传递给它。一开始楼主肯定会这样写for(vari=0;idocument.write(" "+ ");""+ freshdreamdata[i]+""+"}生成的html大概是这样XXX-0 XXX-1 XXX-2 当楼主点击这些可爱的链接的时候,就发现没有用。这是为什么呢?因为html解析器不知道'deleteS(i)'其中的i表示什么意思。楼主应该这样写才对:for(vari=0;idocument.write(" "+ ");""+ freshdreamdata[i]+""+"}XXX-0 XXX-1 XXX-2 以上内容均不涉及闭包。如果楼主你想要闭包的话。。也可以。我们就用创建DOM的方法来实现这个功能。varlist=document.createElement('ul');for(vari=0;ivarli=document.createElement('li'); varlink=document.createElement('a');link.onclick=function(){deleteS(i)}link.innerText=freshdreamdata[i];li.appendChild(link);list.appendChild(li);}document.appendChild(list);很多新手都会这样写,看上去好像没什么问题,但当实际操作的时候就会发现传入deleteS里的i值总是一个定值,不管点击哪个链接,删除的都是最后一个。这个时候就需要闭包了。functionbibao(i){returnfunction(){deleteS(i);}}varlist=document.createElement('ul');for(vari=0;ivarli=document.createElement('li'); varlink=document.createElement('a');link.onclick=bibao(i);link.innerText=freshdreamdata[i];li.appendChild(link);list.appendChild(li);}目测楼主基本功不够扎实,上面我就先告诉个结果,其中道理自己细细品味。
12345678_0001
"+i+" ");
TA贡献1802条经验 获得超5个赞
for循环中的i,你应该希望输出到bibao的参数中去,实际上没有……当然,你可能是想引发一个闭包问题,那当我没说……bibao(i)返回一个lambda,你是要执行它吗?你应该输入bibao(i)()这个例子中有一些缺失的函数,我就拿最简单的代替了。以下代码是可以拷贝到console直接运行的:functionbibao(i){returnfunction(e){alert(i);}}for(vari=0;i<10;i++){document.write("
}
添加回答
举报
0/150
提交
取消