在《JavaScript高級程序設(shè)計(jì)(第3版)》(Nicholas C.Zakas 著) 的“7.2閉包”一節(jié)中,作者為了說明“閉包所保存的是整個(gè)變量對象,而不是某個(gè)特殊的變量”,舉了一個(gè)例子,代碼如下:function?createFunctions(){
????var?result?=?new?Array();
????
????for?(var?i=0;i<10;i++){
????????result[i]?=?function(){
????????????return?i;
????????};
????}
????
????return?result;
}作者說,這個(gè)函數(shù)設(shè)計(jì)的目的是返回一個(gè)數(shù)組{0,1,2,3,4,5,6,7,8,9},但是實(shí)際上會返回{10,10,10,10,10,10,10,10,10,10}。那么問題來了,為什么我去調(diào)試,返回的是:{ 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);?試了也不行,也沒解析內(nèi)嵌的匿名函數(shù)。
??}
關(guān)于JS閉包的問題
NodeOS
2016-03-05 15:46:05