<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),即會輸出10個10,顯然這不是我們想要的 //原因:因為每個函數都保存了createArray函數的活動對象,所以他們引用的都是同一個i(按引用傳的值) //解決方案:把按引用傳參修改為按值傳參 function createArray() { var arr = new Array(); for (var i = 0; i < 10; i++) { arr[i] = function (num) { return function () { return num; } } (i);//調用此匿名函數返回內部匿名函數,這里多了一步按值傳遞參數 } return arr; } var funcs = createArray(); for (var i = 0; i < funcs.length; i++) { alert(funcs[i]() + "<br />"); } //以上輸出的為理想結果 </script>