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

鍍金池/ 問(wèn)答/HTML/ 變量作用域及棧堆儲(chǔ)存

變量作用域及棧堆儲(chǔ)存

代碼:

clipboard.png

問(wèn)題:這三個(gè)obj之間的關(guān)系是什么?從作用域和棧堆的角度分析?

回答
編輯回答
薔薇花

第一個(gè)obj是sum函數(shù)的形參,第二個(gè)obj是sum函數(shù)的內(nèi)部變量,第三個(gè)obj是sum函數(shù)調(diào)用時(shí)的實(shí)參。

2017年1月22日 16:19
編輯回答
離殤

首先你要說(shuō)明到底哪三個(gè),這里不止三個(gè)啊,假設(shè)是這樣:

function sum(obj) { // 第二個(gè) obj
    obj.a = 3;
    var obj = new Object(); // 第三個(gè) obj
    obj.a = 2;
    console.log(obj.a);
}
var obj = { a: 1 }; // 第一個(gè) obj
sum(obj);
console.log(obj.a);

執(zhí)行該代碼,此時(shí)是全局作用域,該作用域內(nèi)有sum、obj以及所有的全局對(duì)象如console?!暗谝粋€(gè) obj”就是一個(gè)普通的變量,指向了{ a: 1 }這個(gè)對(duì)象在內(nèi)存中的地址。

執(zhí)行sum函數(shù),將sum函數(shù)的作用域入棧,該作用域內(nèi)有obj以及所有的全局對(duì)象如console,分析該作用域內(nèi)的obj。首先“第二個(gè) obj”是形參,可以理解為會(huì)在sum函數(shù)作用域內(nèi)聲明obj變量,該變量也指向了 { a: 1 }在內(nèi)存中的地址;“第三個(gè) obj”是在該作用域內(nèi)聲明的一個(gè)變量,等于就是重復(fù)聲明了obj,將該變量指向了一個(gè)內(nèi)存中新的對(duì)象{};

然后指向console.log,將該作用域入棧,執(zhí)行完后出棧。sum函數(shù)執(zhí)行完成,出棧。執(zhí)行console.log,入棧,再出棧。

最后在回答下你的問(wèn)題,這三個(gè)obj之間的關(guān)系是什么?

  • 第一個(gè)和第二個(gè) obj 都是指向了同一個(gè)對(duì)象,obj1 === obj2
  • 第三個(gè) obj 指向一個(gè)新的對(duì)象,obj1 !== obj3
如果想要更多人回答你的問(wèn)題,建議你代碼不要拍照,描述更加清晰些。希望對(duì)你有幫助。
2018年3月1日 05:59