成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS基礎(chǔ)-連續(xù)賦值

Youngdze / 2173人閱讀

摘要:引子今天同事聊天群里發(fā)現(xiàn)了一道面試題基礎(chǔ),但答案基本沒(méi)有幾個(gè)能答對(duì)并且理解的很透徹的。但是此時(shí)這個(gè)內(nèi)存區(qū)并沒(méi)有被回收因?yàn)樽兞康闹羔樢廊恢赶蛩?。并且因?yàn)橹熬吐暶髁藢傩运栽搩?nèi)存區(qū)增加了屬性。那么屬性指向哪兒呢它的返回值就是的內(nèi)存區(qū)。

引子

今天同事聊天群里發(fā)現(xiàn)了一道面試題(js基礎(chǔ)),但答案基本沒(méi)有幾個(gè)能答對(duì)并且理解的很透徹的。

問(wèn)題
var a = {n: 1};

var b = a;  

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

console.log(a.x);  
console.log(b.x);

先不說(shuō)答案,可能有些人已經(jīng)答錯(cuò)了~

錯(cuò)誤的答案

這多簡(jiǎn)單!JS賦值運(yùn)算右結(jié)合!那就分開(kāi)算唄!

a = {n: 2}
a.x = a

然后錯(cuò)誤的答案就這么產(chǎn)生了,a.x = {n: 2}

正解

其實(shí)這道題看似簡(jiǎn)單但還是有一些繞,我依稀記得高中數(shù)學(xué)老師那句經(jīng)典的口頭禪!
遇到難題:畫(huà)圖啊!
好吧,這句話可能我會(huì)受用一輩子,同時(shí)也送給看這篇文章的同學(xué),希望能給你們編程帶來(lái)一些新的思路。

var a = {n: 1};

var b = a; 

畫(huà)圖

這句話也是關(guān)鍵所在

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

畫(huà)圖

根據(jù)js引擎語(yǔ)法解析,會(huì)先去從左到右尋找有沒(méi)有未聲明的變量,如果有就把該變量提升至作用域頂部并聲明該變量。那么恭喜js引擎他找到a.x這個(gè)屬性沒(méi)有聲明,那么他會(huì)在{n: 1}這個(gè)內(nèi)存區(qū)聲明一個(gè)x屬性等待賦值!

語(yǔ)法解析完成后,開(kāi)始進(jìn)行運(yùn)算(ps:賦值運(yùn)算),首先將a變量的指針指向了一個(gè)新的內(nèi)存區(qū){n: 2},那么a變量脫離了對(duì)內(nèi)存區(qū){n: 1}的引用關(guān)系。

但是此時(shí){n:1 }這個(gè)內(nèi)存區(qū)并沒(méi)有被GC回收因?yàn)閎變量的指針依然指向它。并且因?yàn)橹熬吐暶髁藊屬性所以該內(nèi)存區(qū)
增加了X屬性。那么X屬性指向哪兒呢?a.x = a = {n: 2}它的返回值就是{n: 2}的內(nèi)存區(qū)。

如下圖:

那么根據(jù)圖上可得:
a.x 不存在,故: => undefined(ps:因?yàn)镴S的缺陷這里應(yīng)當(dāng)報(bào)個(gè)錯(cuò)啥的~ Undefind reference)
b.x => {n: 2}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/81737.html

相關(guān)文章

  • js 值引用和值復(fù)制

    摘要:值類型中值的類型可簡(jiǎn)單分為三類,即基礎(chǔ)類型復(fù)雜類型特殊類型。復(fù)雜類型是指即廣義的對(duì)象類型,可由多個(gè)簡(jiǎn)單類型的值的合成,可以看作是一個(gè)存放各種值的容器。值類型賦值舉例引用類型賦值舉例 JS值類型 JS中值的類型可簡(jiǎn)單分為三類,即基礎(chǔ)類型、復(fù)雜類型、特殊類型。ES5中有6種數(shù)據(jù)類型:null,undefined,number,string,boolean,object。復(fù)雜類型是指obje...

    weij 評(píng)論0 收藏0
  • 連續(xù)賦值到:詞法分析、函數(shù)執(zhí)行原理

    摘要:先說(shuō)下這個(gè)老話題連續(xù)賦值例結(jié)果是什么這句簡(jiǎn)單,而這句呢答案是,變成了全局變量了這是實(shí)際執(zhí)行順序未使用聲明,所以變?nèi)肿兞苛死茉缫郧暗拿嬖囶}目了,相信很多人知道答案,考點(diǎn)詞法分析執(zhí)行順序運(yùn)算符優(yōu)先級(jí)等這是我理解的實(shí)際執(zhí)行順序我是這么猜想的自 先說(shuō)下這個(gè)老話題:連續(xù)賦值 例1: function a(){ var o1 = o2 = 5; } a(); console.l...

    rose 評(píng)論0 收藏0
  • task0002(一)- JavaScript數(shù)據(jù)類型及語(yǔ)言基礎(chǔ)

    摘要:不過(guò)讓流行起來(lái)的原因應(yīng)該是是目前所有主流瀏覽器上唯一支持的腳本語(yǔ)言。經(jīng)過(guò)測(cè)試,數(shù)字字符串布爾日期可以直接賦值,修改不會(huì)產(chǎn)生影響。再考慮對(duì)象類型為或者的情況。對(duì)于結(jié)果聲明其類型。判斷對(duì)象的類型是還是,結(jié)果類型更改。 轉(zhuǎn)載自我的個(gè)人博客 歡迎大家批評(píng)指正 1. 第一個(gè)頁(yè)面交互 這里最需要學(xué)習(xí)的老師的代碼中,每一部分功能都由函數(shù)控制,沒(méi)有創(chuàng)建一個(gè)全部變量。且最后有一個(gè)函數(shù)來(lái)控制執(zhí)行代碼...

    elarity 評(píng)論0 收藏0
  • 也許這樣理解JavaScript連續(xù)賦值更加簡(jiǎn)單明了一些

    摘要:最近發(fā)現(xiàn)很多同學(xué)的博客里都會(huì)解釋連續(xù)賦值問(wèn)題,各種概念輩出,特別是對(duì)于不理解的同學(xué)來(lái)說(shuō),更加一頭霧水,我這里做個(gè)簡(jiǎn)單解釋,也許不懂的一看就明白了。 最近發(fā)現(xiàn)很多同學(xué)的博客里都會(huì)解釋js連續(xù)賦值問(wèn)題,各種概念輩出,特別是對(duì)于不理解的同學(xué)來(lái)說(shuō),更加一頭霧水,我這里做個(gè)簡(jiǎn)單解釋,也許不懂的一看就明白了。 先拋出一個(gè)問(wèn)題: var a = {c:1} //第一步 var b =...

    BoYang 評(píng)論0 收藏0
  • js中的值類型、引用類型、堆、棧、函數(shù)參數(shù)傳遞方式、連續(xù)賦值等概念的學(xué)習(xí)

    摘要:值類型基本類型和棧內(nèi)存值類型也稱為原始數(shù)據(jù)或原始值這類值存儲(chǔ)在棧內(nèi)存中基本類型的值不可以修改。目前中的基本類型一共有六種。堆的使用規(guī)則當(dāng)創(chuàng)建數(shù)組時(shí),就會(huì)在堆內(nèi)存中創(chuàng)建一個(gè)數(shù)組對(duì)象,并且在棧內(nèi)存中創(chuàng)建一個(gè)對(duì)數(shù)組的引用。 值類型(基本類型)和棧內(nèi)存 值類型也稱為原始數(shù)據(jù)或原始值(primitive value).這類值存儲(chǔ)在棧(stack)內(nèi)存中, 基本類型的值不可以修改。每當(dāng)我們定義一個(gè)...

    hizengzeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<