摘要:引子今天同事聊天群里發現了一道面試題基礎,但答案基本沒有幾個能答對并且理解的很透徹的。但是此時這個內存區并沒有被回收因為變量的指針依然指向它。并且因為之前就聲明了屬性所以該內存區增加了屬性。那么屬性指向哪兒呢它的返回值就是的內存區。
引子
今天同事聊天群里發現了一道面試題(js基礎),但答案基本沒有幾個能答對并且理解的很透徹的。
問題var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); console.log(b.x);
先不說答案,可能有些人已經答錯了~
錯誤的答案這多簡單!JS賦值運算右結合!那就分開算唄!
a = {n: 2} a.x = a
然后錯誤的答案就這么產生了,a.x = {n: 2}
正解其實這道題看似簡單但還是有一些繞,我依稀記得高中數學老師那句經典的口頭禪!
遇到難題:畫圖啊!
好吧,這句話可能我會受用一輩子,同時也送給看這篇文章的同學,希望能給你們編程帶來一些新的思路。
var a = {n: 1}; var b = a;
畫圖
這句話也是關鍵所在
a.x = a = {n: 2};
畫圖
根據js引擎語法解析,會先去從左到右尋找有沒有未聲明的變量,如果有就把該變量提升至作用域頂部并聲明該變量。那么恭喜js引擎他找到a.x這個屬性沒有聲明,那么他會在{n: 1}這個內存區聲明一個x屬性等待賦值!
語法解析完成后,開始進行運算(ps:賦值運算),首先將a變量的指針指向了一個新的內存區{n: 2},那么a變量脫離了對內存區{n: 1}的引用關系。
但是此時{n:1 }這個內存區并沒有被GC回收因為b變量的指針依然指向它。并且因為之前就聲明了x屬性所以該內存區
增加了X屬性。那么X屬性指向哪兒呢?a.x = a = {n: 2}它的返回值就是{n: 2}的內存區。
如下圖:
那么根據圖上可得:
a.x 不存在,故: => undefined(ps:因為JS的缺陷這里應當報個錯啥的~ Undefind reference)
b.x => {n: 2}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81737.html
摘要:值類型中值的類型可簡單分為三類,即基礎類型復雜類型特殊類型。復雜類型是指即廣義的對象類型,可由多個簡單類型的值的合成,可以看作是一個存放各種值的容器。值類型賦值舉例引用類型賦值舉例 JS值類型 JS中值的類型可簡單分為三類,即基礎類型、復雜類型、特殊類型。ES5中有6種數據類型:null,undefined,number,string,boolean,object。復雜類型是指obje...
摘要:先說下這個老話題連續賦值例結果是什么這句簡單,而這句呢答案是,變成了全局變量了這是實際執行順序未使用聲明,所以變全局變量了例很早以前的面試題目了,相信很多人知道答案,考點詞法分析執行順序運算符優先級等這是我理解的實際執行順序我是這么猜想的自 先說下這個老話題:連續賦值 例1: function a(){ var o1 = o2 = 5; } a(); console.l...
摘要:不過讓流行起來的原因應該是是目前所有主流瀏覽器上唯一支持的腳本語言。經過測試,數字字符串布爾日期可以直接賦值,修改不會產生影響。再考慮對象類型為或者的情況。對于結果聲明其類型。判斷對象的類型是還是,結果類型更改。 轉載自我的個人博客 歡迎大家批評指正 1. 第一個頁面交互 這里最需要學習的老師的代碼中,每一部分功能都由函數控制,沒有創建一個全部變量。且最后有一個函數來控制執行代碼...
摘要:最近發現很多同學的博客里都會解釋連續賦值問題,各種概念輩出,特別是對于不理解的同學來說,更加一頭霧水,我這里做個簡單解釋,也許不懂的一看就明白了。 最近發現很多同學的博客里都會解釋js連續賦值問題,各種概念輩出,特別是對于不理解的同學來說,更加一頭霧水,我這里做個簡單解釋,也許不懂的一看就明白了。 先拋出一個問題: var a = {c:1} //第一步 var b =...
摘要:值類型基本類型和棧內存值類型也稱為原始數據或原始值這類值存儲在棧內存中基本類型的值不可以修改。目前中的基本類型一共有六種。堆的使用規則當創建數組時,就會在堆內存中創建一個數組對象,并且在棧內存中創建一個對數組的引用。 值類型(基本類型)和棧內存 值類型也稱為原始數據或原始值(primitive value).這類值存儲在棧(stack)內存中, 基本類型的值不可以修改。每當我們定義一個...
閱讀 1733·2021-11-24 10:18
閱讀 2207·2021-11-18 13:20
閱讀 2332·2021-08-23 09:46
閱讀 992·2019-08-30 15:56
閱讀 2840·2019-08-30 15:53
閱讀 737·2019-08-30 14:22
閱讀 470·2019-08-29 15:34
閱讀 2531·2019-08-29 12:14