在《JavaScript高級程序設計(第3版)》(Nicholas C.Zakas 著) 的“7.2閉包”一節中,作者為了說明“閉包所保存的是整個變量對象,而不是某個特殊的變量”,舉了一個例子,代碼如下:function?createFunctions(){
????var?result?=?new?Array();
????
????for?(var?i=0;i<10;i++){
????????result[i]?=?function(){
????????????return?i;
????????};
????}
????
????return?result;
}作者說,這個函數設計的目的是返回一個數組{0,1,2,3,4,5,6,7,8,9},但是實際上會返回{10,10,10,10,10,10,10,10,10,10}。那么問題來了,為什么我去調試,返回的是:{ function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} }WTF!!!!!!!P.S. ?我用的是alert和document.write命令,代碼如下:??function?test(){
????var?result?=?new?Array();
????
????for?(var?i=0;i<10;i++){
????????result[i]?=?function(){
????????????return?i;
????????};
????}
?? alert(result);
?? //document.write(result);?試了也不行,也沒解析內嵌的匿名函數。
??}
關于JS閉包的問題
NodeOS
2016-03-05 15:46:05