第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

閉包問題?

閉包問題?

炎炎設(shè)計 2019-04-09 20:24:31
functionbibao(i){returnfunction(e){deleteS(i);}}for(vari=0;i
查看完整描述

2 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊

樓主的代碼里有很多我看不懂的地方,我據(jù)姑且的認(rèn)為樓主想要實現(xiàn)這么一個效果:
有個存儲數(shù)據(jù)的數(shù)組freshdreamdata,生成一個列表,列表里的內(nèi)容與freshdreamdata一一對應(yīng)。當(dāng)用戶點(diǎn)擊列表里的項目時就調(diào)用deleteS并將項目的號碼傳遞給它。
一開始樓主肯定會這樣寫
for(vari=0;idocument.write("
  • "+
    ""+
    freshdreamdata[i]+
    ""+
    "
  • ");
    }
    生成的html大概是這樣
  • XXX-0
  • XXX-1
  • XXX-2
  • 當(dāng)樓主點(diǎn)擊這些可愛的鏈接的時候,就發(fā)現(xiàn)沒有用。這是為什么呢?因為html解析器不知道'deleteS(i)'其中的i表示什么意思。樓主應(yīng)該這樣寫才對:
    for(vari=0;idocument.write("
  • "+
    ""+
    freshdreamdata[i]+
    ""+
    "
  • ");
    }
  • XXX-0
  • XXX-1
  • XXX-2
  • 以上內(nèi)容均不涉及閉包。如果樓主你想要閉包的話。。也可以。我們就用創(chuàng)建DOM的方法來實現(xiàn)這個功能。
    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);
    很多新手都會這樣寫,看上去好像沒什么問題,但當(dāng)實際操作的時候就會發(fā)現(xiàn)傳入deleteS里的i值總是一個定值,不管點(diǎn)擊哪個鏈接,刪除的都是最后一個。
    這個時候就需要閉包了。
    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);
    }
    目測樓主基本功不夠扎實,上面我就先告訴個結(jié)果,其中道理自己細(xì)細(xì)品味。
                                
    查看完整回答
    反對 回復(fù) 2019-04-09
    ?
    千巷貓影

    TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊

    for循環(huán)中的i,你應(yīng)該希望輸出到bibao的參數(shù)中去,實際上沒有……當(dāng)然,你可能是想引發(fā)一個閉包問題,那當(dāng)我沒說……
    bibao(i)返回一個lambda,你是要執(zhí)行它嗎?你應(yīng)該輸入bibao(i)()
    這個例子中有一些缺失的函數(shù),我就拿最簡單的代替了。以下代碼是可以拷貝到console直接運(yùn)行的:
    functionbibao(i){
    returnfunction(e){
    alert(i);
    }
    }
    for(vari=0;i<10;i++){
    document.write("
  • "+i+"
  • ");
    }
                                
    查看完整回答
    反對 回復(fù) 2019-04-09
    • 2 回答
    • 0 關(guān)注
    • 368 瀏覽
    慕課專欄
    更多

    添加回答

    舉報

    0/150
    提交
    取消
    微信客服

    購課補(bǔ)貼
    聯(lián)系客服咨詢優(yōu)惠詳情

    幫助反饋 APP下載

    慕課網(wǎng)APP
    您的移動學(xué)習(xí)伙伴

    公眾號

    掃描二維碼
    關(guān)注慕課網(wǎng)微信公眾號