在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js閉包問題

js閉包問題

以下為一個簡單for循環(huán),結(jié)果輸出全部為x=4;

var a=[],b={};
for(var i=0;i<5;i++){
  b.x=i;
  a[i]=b;  
}
console.log(a);

修改后代碼如下,則輸出的結(jié)果是預(yù)期的結(jié)果,請問各位大神,這是閉包問題引起的嗎?需要把對象b設(shè)置在for循環(huán)之外如何實現(xiàn)?

var a=[];
for(var i=0;i<5;i++){ 
 var b={};
  b.x=i;
  a[i]=b;  
}
console.log(a);

題目來源及自己的思路

相關(guān)代碼

// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

回答
編輯回答
吃藕丑

不是閉包引起的,是因為b是對象,是引用類型變量,你把b的值放進(jìn)a數(shù)組,其實放進(jìn)去的只是一個內(nèi)存地址,并不是b這個值本身,你循環(huán)每次都在改變b的值,也會對應(yīng)的改變已經(jīng)添加到a數(shù)組里面的b的值,所以最后得到的a的值,里面的b全都是一樣的。想到你預(yù)期結(jié)果,就像你后面說的那樣,循環(huán)體里面重新申明一個b。
順便說一句,循環(huán)可是不會產(chǎn)生閉包的,閉包只存在于函數(shù)體里面。

2018年8月6日 08:42
編輯回答
初念

這個跟閉包沒有關(guān)系吧?
第一個例子,
先對對象b的x屬性賦值,后續(xù)的循環(huán)都只是修改x屬性,最終x屬性是4,但是b對象始終只有一個實例對象。
而a[i] = b;不過是將a數(shù)組中的每一個值指向b數(shù)組的實例而已。

2018年8月26日 16:54