通過實例了解JS 連續(xù)賦值
這篇文章主要介紹了通過實例了解JS 連續(xù)賦值,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
問題:
var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); //undfined console.log(b.x); //{a:2}
根據(jù)js引擎語法解析,會先去從左到右尋找有沒有未聲明的變量,如果有就把該變量提升至作用域頂部并聲明該變量。那么恭喜js引擎他找到a.x這個屬性沒有聲明,那么他會在{n: 1}這個內(nèi)存區(qū)聲明一個x屬性等待賦值!
語法解析完成后,開始進行運算(ps:賦值運算),首先將a變量的指針指向了一個新的內(nèi)存區(qū){n: 2},那么a變量脫離了對內(nèi)存區(qū){n: 1}的引用關(guān)系。
但是此時{n:1 }這個內(nèi)存區(qū)并沒有被GC回收因為b變量的指針依然指向它。并且因為之前就聲明了x屬性所以該內(nèi)存區(qū)
增加了X屬性。那么X屬性指向哪兒呢?a.x = a = {n: 2}它的返回值就是{n: 2}的內(nèi)存區(qū)。
那么根據(jù)圖上可得:
a.x 不存在,故: => undefined
b.x => {n: 2}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js中substr,substring,indexOf,lastIndexOf,split,replace的用法詳解
這篇文章主要介紹了js中substr,substring,indexOf,lastIndexOf,split,replace的用法詳解的相關(guān)資料,需要的朋友可以參考下2015-11-11JavaScript 瀏覽器對象模型BOM原理與常見用法實例分析
這篇文章主要介紹了JavaScript 瀏覽器對象模型BOM原理與常見用法,結(jié)合實例形式詳細分析了JavaScript瀏覽器對象模型BOM基本概念、原理、使用方法及操作注意事項,需要的朋友可以參考下2019-12-12JS實現(xiàn)圖片旋轉(zhuǎn)動畫效果封裝與使用示例
這篇文章主要介紹了JS實現(xiàn)圖片旋轉(zhuǎn)動畫效果封裝與使用,結(jié)合實例形式分析了JavaScript實現(xiàn)圖片元素旋轉(zhuǎn)的相關(guān)功能代碼的封裝與使用操作技巧,需要的朋友可以參考下2018-07-07Javascript拖拽系列文章2之offsetLeft、offsetTop、offsetWidth、offsetHei
Javascript拖拽用到的一些關(guān)于位置定位的一些參數(shù)2008-09-09CSS3+JavaScript實現(xiàn)翻頁幻燈片效果
這篇文章主要介紹了CSS3+JavaScript實現(xiàn)翻頁幻燈片效果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-06-06element-ui 上傳圖片后標(biāo)注坐標(biāo)點
有個組件庫的名稱叫做element-ui,基于Vue2.0開發(fā),提供了豐富的PC端組件,本文通過實例代碼給大家介紹element-ui 上傳圖片后標(biāo)注坐標(biāo)點的示例代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07require導(dǎo)入module.exports 或 exports導(dǎo)出的使用方法
module.exports用于導(dǎo)出整個模塊的內(nèi)容,可以通過賦值給 module.exports 導(dǎo)出一個對象、函數(shù)或值,導(dǎo)出的內(nèi)容可以被其他模塊通過require 導(dǎo)入,本文給大家介紹require導(dǎo)入module.exports 或 exports導(dǎo)出的使用,感興趣的朋友一起看看吧2023-11-11使用uniapp打包微信小程序時主包和vendor.js過大解決(uniCloud的插件分包)
每個使用分包小程序必定含有一個主包,所謂的主包,即放置默認啟動頁面/TabBar頁面,以及一些所有分包都需用到公共資源/JS 腳本,下面這篇文章主要給大家介紹了關(guān)于使用uniapp打包微信小程序時主包和vendor.js過大解決的相關(guān)資料,,需要的朋友可以參考下2023-02-02