JavaScript中通過閉包解決只能取得包含函數(shù)中任何變量最后一個(gè)值的問題
更新時(shí)間:2010年08月12日 10:23:58 作者:
JavaScript中解決閉包只能取得包含函數(shù)中任何變量最后一個(gè)值的問題
復(fù)制代碼 代碼如下:
<script type="text/javascript">
function createArray() {
var arr = new Array();
for (var i = 0; i < 10; i++) {
arr[i] = function () {
return i;
}
}
return arr;
}
var funcs = createArray();
for (var i = 0; i < funcs.length; i++) {
document.write(funcs[i]() + "<br />");
}
//以上輸出全部是i的最后一次的值(10),即會(huì)輸出10個(gè)10,顯然這不是我們想要的
//原因:因?yàn)槊總€(gè)函數(shù)都保存了createArray函數(shù)的活動(dòng)對象,所以他們引用的都是同一個(gè)i(按引用傳的值)
//解決方案:把按引用傳參修改為按值傳參
function createArray() {
var arr = new Array();
for (var i = 0; i < 10; i++) {
arr[i] = function (num) {
return function () {
return num;
}
} (i);//調(diào)用此匿名函數(shù)返回內(nèi)部匿名函數(shù),這里多了一步按值傳遞參數(shù)
}
return arr;
}
var funcs = createArray();
for (var i = 0; i < funcs.length; i++) {
alert(funcs[i]() + "<br />");
}
//以上輸出的為理想結(jié)果
</script>
相關(guān)文章
阻止事件(取消瀏覽器對事件的默認(rèn)行為并阻止其傳播)
取消瀏覽器對事件的默認(rèn)行為(響應(yīng))(比如a標(biāo)簽的跳轉(zhuǎn)等)并停止事件的繼續(xù)傳播,下面有一個(gè)不錯(cuò)的示例大家可以感受下2013-11-11
論壇轉(zhuǎn)貼工具中用到的正則表達(dá)式學(xué)習(xí)正則的好例子
論壇轉(zhuǎn)貼工具中用到的正則表達(dá)式學(xué)習(xí)正則的好例子...2007-11-11
通用javascript腳本函數(shù)庫 方便開發(fā)
javascript 在 WEB 編程中能起到很大的作用,將一些常用的功能寫成javascript類庫。2009-10-10
JavaScript實(shí)現(xiàn)基于Cookie的存儲(chǔ)類實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)基于Cookie的存儲(chǔ)類,實(shí)例分析了javascript通過cookie實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
JS基于Mootools實(shí)現(xiàn)的個(gè)性菜單效果代碼
這篇文章主要介紹了JS基于Mootools實(shí)現(xiàn)的個(gè)性菜單效果代碼,涉及JavaScript頁面元素的遍歷及樣式的動(dòng)態(tài)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
JavaScript實(shí)例--創(chuàng)建一個(gè)歡迎cookie
這篇文章主要介紹了JavaScript實(shí)例--創(chuàng)建一個(gè)歡迎cookie,2022-01-01

