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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

3 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

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

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


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


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


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


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


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


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

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



查看完整回答
反對(duì) 回復(fù) 2019-12-14
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

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


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


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


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


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


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


回到我們剩下的問題:


foo.x = foo;


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


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


因此,在執(zhí)行foo.x時(shí)會(huì)給出undefined,因?yàn)閒oo中只有1個(gè)值為{n:2}的值。


但是,如果您嘗試執(zhí)行bar.x,它將得到{n:2}?;蛘撸绻粓?zhí)行bar,結(jié)果將是


對(duì)象{n:1,x:對(duì)象}



查看完整回答
反對(duì) 回復(fù) 2019-12-14
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

我以為我會(huì)添加另一種我認(rèn)為有用的思考方式。


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


換句話說,foo和bar首先都引用相同的對(duì)象{n:1}。使用時(shí)foo.x =,您正在訪問{n:1}該x屬性并將其添加到其中。這可以通過任一方法完成,bar或者foo因?yàn)樗鼈兌贾赶騼?nèi)存中的同一對(duì)象!這沒什么區(qū)別。


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


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



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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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