为了账号安全,请及时绑定邮箱和手机立即绑定

闭包问题?

闭包问题?

墨色风雨 2019-04-08 11:17:48
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);
    }
    目测楼主基本功不够扎实,上面我就先告诉个结果,其中道理自己细细品味。
                                
    查看完整回答
    反对 回复 2019-04-08
    ?
    12345678_0001

    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("
  • "+i+"
  • ");
    }
                                
    查看完整回答
    反对 回复 2019-04-08
    • 2 回答
    • 0 关注
    • 290 浏览
    慕课专栏
    更多

    添加回答

    举报

    0/150
    提交
    取消
    意见反馈 帮助中心 APP下载
    官方微信