脚本宝典收集整理的这篇文章主要介绍了js實例教程-js連續賦值的基礎面試題題解,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小寶典致力於為廣大程序猿(媛)提供高品質的代碼服務,請大家多多光顧小站,小寶典在此謝過。
今天同事聊天群里發現了一道面試題(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}
function func(){ var a =b =5;}相當於
var b; function func() { var a; b = 5; a = b; }
今天同事聊天群里發現了一道面試題(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}
function func(){ var a =b =5;}相當於
var b; function func() { var a; b = 5; a = b; }
覺得可用,就經常來吧!Javascript技巧 腳本寶典 歡迎評論哦! js技巧,巧奪天工,精雕玉琢。小寶典獻醜了!
以上是脚本宝典为你收集整理的js實例教程-js連續賦值的基礎面試題題解全部内容,希望文章能够帮你解决js實例教程-js連續賦值的基礎面試題題解所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。