第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript代碼技巧:foo.x的值是什么

JavaScript代碼技巧:foo.x的值是什么

桃花長相依 2019-12-13 15:10:33
我在GitHub前端面試問題集中發(fā)現(xiàn)了這個問題:var foo = {n: 1};var bar = foo;foo.x = foo = {n: 2};問題:foo.x的值是什么?答案是undefined。我已經(jīng)進行了一些研究,并且我理解這個問題(如果我錯了,請糾正我):var foo = {n: 1};聲明一個foo屬性n等于1 的對象。var bar = foo;聲明一個對象bar,該對象引用與相同的對象foo。foo.x = foo = {n: 2}; 我相信等于 foo.x = (foo = {n: 2});然后我foo.x等于undefined。但是,的值bar.x是object {n:2}。如果bar和foo引用相同的對象,為什么在bar.x得到值卻foo.x是undefined?真正發(fā)生了foo.x = foo = {n: 2};什么?
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

foo.x = foo = {n: 2};

判定foo.x是指一種屬性x的的{n: 1}目的,分配{n: 2}給foo,并分配的新值foo- {n: 2}-為屬性x的的{n: 1}對象。


重要的是,foo這foo.x指的是之前確定foo的變化。


參見ES5規(guī)范的11.13.1節(jié):


令lref為評估LeftHandSideExpression的結(jié)果。


令rref為評估AssignmentExpression的結(jié)果。


賦值運算符從右到左關(guān)聯(lián),因此您得到:


foo.x = (foo = {n: 2})

首先評估左側(cè),然后評估右側(cè)。



查看完整回答
反對 回復 2019-12-14
?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

foo.x = foo = {n:2};


此處foo指的是賦值之前即執(zhí)行語句之前的{n:1}對象。


該語句可以重寫為foo.x =(foo = {n:2});


在對象方面,以上語句可以重寫為 {n:1} .x =({n:1} = {n:2});


由于分配僅從右到左發(fā)生。因此,這里我們只需要在執(zhí)行開始之前檢查foo是否指向哪個對象。


在解決RHS時: foo = {n:2} ; 現(xiàn)在foo指的是{n:2};


回到我們剩下的問題:


foo.x = foo;


現(xiàn)在,LHS上的foo.x仍然是{n:1} .x,而RHS上的foo是{n:2}。


因此,在執(zhí)行該語句后,{n:1}將變?yōu)閧n:1,x:{n:2}},并且bar仍引用該語句。凡為FOO現(xiàn)在將參照{(diào)N:2} 。


因此,在執(zhí)行foo.x時會給出undefined,因為foo中只有1個值為{n:2}的值。


但是,如果您嘗試執(zhí)行bar.x,它將得到{n:2}。或者,如果您只執(zhí)行bar,結(jié)果將是


對象{n:1,x:對象}



查看完整回答
反對 回復 2019-12-14
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

我以為我會添加另一種我認為有用的思考方式。


最后的變量分配等同于write bar.x = foo = {n:2};,因為這些變量只是對內(nèi)存中同一事物的引用。


換句話說,foo和bar首先都引用相同的對象{n:1}。使用時foo.x =,您正在訪問{n:1}該x屬性并將其添加到其中。這可以通過任一方法完成,bar或者foo因為它們都指向內(nèi)存中的同一對象!這沒什么區(qū)別。


然后,當您完成該行時,foo.x = foo = {n:2}您將通過對象文字語法在內(nèi)存中創(chuàng)建另一個全新的對象,并設(shè)置foo為指向該對象{n:2},而不是現(xiàn)在的對象{n:1, x: {n: 2}。但是,這不會影響foo將x屬性添加到該屬性時所指向的內(nèi)容。


這非常令人困惑,但是我認為您可以考慮這樣一個事實,即變量只是指向內(nèi)存中的位置/對象的指針,并且對象文字語法不會更改先前存在的對象(即使它們看起來很相似)。它正在創(chuàng)造一個全新的。



查看完整回答
反對 回復 2019-12-14
  • 3 回答
  • 0 關(guān)注
  • 357 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號