導航:首頁 > 編程語言 > 閉包代碼

閉包代碼

發布時間:2023-09-20 09:56:09

js閉包怎麼寫

varresult=[];
functionfoo(){
vari=0;
for(;i<3;i=i+1){
result[i]=function(){
alert(i)
}
}
};
foo();
result[0]();//3
result[1]();//3
result[2]();//3

這段代碼中,程序員希望foo函數中的變數i被內部循環的函數使用,並且能分別獲得他們的索引,而實際上,只能獲得該變數最後保留的值,也就是說.閉包中所記錄的自由變數,只是對這個變數的一個引用,而非變數的值,當這個變數被改變了,閉包里獲取到的變數值,也會被改變.


解決的方法之一,是讓內部函數在循環創建的時候立即執行,並且捕捉當前的索引值,然後記錄在自己的一個本地變數里.然後利用返回函數的方法,重寫內部函數,讓下一次調用的時候,返回本地變數的值,改進後的代碼:

varresult=[];
functionfoo(){
vari=0;
for(;i<3;i=i+1){
result[i]=(function(j){
returnfunction(){
alert(j);
};
})(i);
}
};
foo();
result[0]();//0
result[1]();//1
result[2]();//2
閱讀全文

與閉包代碼相關的資料

熱點內容
谷歌app如何刪除 瀏覽:118
注銷微信支付實名 瀏覽:158
怎樣把eps文件轉化為ps源文件呢 瀏覽:767
宜家視頻什麼網站出來的 瀏覽:901
電腦微信保持東西不在文件夾 瀏覽:616
華為nova8pro怎麼切換數據 瀏覽:658
qq怎麼傳文件到電腦Excel 瀏覽:927
z3735fwin改安卓 瀏覽:877
如何將篩選後的數據加填充顏色 瀏覽:100
wordpress去除分類目錄歸檔 瀏覽:506
錢賺賺APP是如何實施詐騙的 瀏覽:383
廣數如何編程循環鑽孔 瀏覽:946
win10電腦怎麼清理電腦緩存文件管理 瀏覽:993
java判斷session是否失效 瀏覽:340
免費看電影軟體有哪些app 瀏覽:74
pad升級不能用迅雷 瀏覽:453
js網頁http請求 瀏覽:582
數據線插不穩手機充電口什麼原因 瀏覽:45
數據分類處理方法有哪些 瀏覽:74
單片機燒寫程序不成功 瀏覽:532

友情鏈接