JS堆疊記憶體的執行機制

2022-09-18 17:09:16 字數 1160 閱讀 8202

棧記憶體ecstack(execution context stack)(作用域)

js之所以能夠在瀏覽器中執行,是因為瀏覽器給js提供了執行的環境棧記憶體

瀏覽器會在計算機記憶體中分配一塊記憶體,專門用來供**執行=》棧記憶體ecstack(execution context stack)執行環境棧,每開啟乙個網頁都會生成乙個全新的ecs

ecs的作用

堆記憶體:引用值對應的空間

堆記憶體釋放

當堆記憶體沒有被任何得變數或者其他東西所占用,瀏覽器會在空閒的時候,自主進行記憶體**,把所有不被占用得記憶體銷毀掉

全域性物件go(global object)瀏覽器端會讓window指向go

瀏覽器把內建得一些屬性方法收到乙個單獨得記憶體中堆記憶體(heap)任何開闢得記憶體都有乙個16進製得記憶體位址,方便後期找到這個記憶體

ec(execution context)執行上下文:**自己執行所在的環境

形成的全域性執行上下文,進入到棧記憶體中執行「進棧」

執行完**,可能會把形成的上下文出棧釋放「出棧」

vo(varibate object)變數物件:在當前上下文中,用來存放建立的變數和值的地方(每乙個執行上下文中都有乙個自己的變數物件,函式私有上下文中叫做ao(activation object)活動物件,但也是變數物件)

vo(g)全域性變數物件:全域性上下文中用來儲存全域性變數的空間,它不是go,只不過某些情況下vo(g)中的東西會和go中的東西有所關聯而已「對映機制」

js中的記憶體分為堆疊記憶體和棧記憶體

棧記憶體釋放:

一般情況下,當函式執行完成,所形成的私有作用域(棧記憶體)都會自動釋放掉,在棧記憶體中儲存的基本值也都會釋放掉,但也有特殊不銷毀的情況:

基本資料型別

var a = 12;
基本資料型別值都是直接儲存到棧記憶體中的

引用資料型別

var a = ;
引用資料型別值都是先開闢乙個堆記憶體,把東西儲存進去,最後把位址放到棧中供變數關聯使用

所有的指標賦值哦都是指標的關聯指向

JS執行機制

js是單執行緒的,settimeout和setinterval是非同步任務,要掛起,不先執行,等同步任務完成之後,再去處理非同步任務 console.log 1 settimeout function 0 console.log 3 console.log 4 輸出 1 3 4 2console.l...

JS執行機制

輸出結果為 1,2,3 js是從上到下執行的 js是單執行緒的,即在同一時間只能做一件事情 遇到同步程式,直接執行 遇到非同步程式,先掛起,等同步程式執行完畢後再執行 同步佇列 優先順序最高 非同步佇列 遇到非同步佇列先掛起,等同步佇列執行完後,再選擇執行非同步佇列的某個 settimeout中的時...

JS執行機制

js單執行緒 在同一時間js只能做一件事。為什麼是單執行緒?如果多執行緒,同時操作乙個dom會出問題。非阻塞 event loop 事件迴圈 任務佇列 同步任務佇列要優先於非同步任務佇列處理。非同步任務被分為巨集任務和微任務。常見的非同步任務分類如下 巨集任務 定時器系列,dom事件 ui互動事件 ...