中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解JS棧和執行上下文

發布時間:2021-10-29 14:31:43 來源:億速云 閱讀:186 作者:iii 欄目:web開發

本篇內容主要講解“怎么理解JS棧和執行上下文”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么理解JS棧和執行上下文”吧!

 棧

棧,存儲貨物或供旅客住宿的地方,可引申為倉庫

數據結構中的棧

棧是一組數據的存放方式,特點是先進后出,后進先出,也有人是通俗的說吃吐原理,最后吃的最新吞出來,看看大概的圖示

怎么理解JS棧和執行上下文
怎么理解JS棧和執行上下文

代碼小案例

function one() {   function two() {       function three() {           debugger;       }       three();   }   two(); } one();

執行上面的js,debugger可以看到,最新進入的one()-two()-three(),但是執行完后最先出棧的是three()最后是one()

怎么理解JS棧和執行上下文
怎么理解JS棧和執行上下文

內存區域

  • 棧也是是存放數據的一種內存區域

  • 程序運行的時候,需要內存空間存放數據。一般來說,系統會劃分出兩種不同的內存空間:一種叫做stack(棧),另一種叫做heap(堆)

  • stack是有結構的,每個區塊按照一定次序存放,可以明確知道每個區塊的大小

  • heap是沒有結構的,數據可以任意存放。因此,stack的尋址速度要快于heap  只要是局部的、占用空間確定的數據,一般都存放在stack里面,否則就放在heap里面,所有的對象都存放在heap

function task() {     var a = 1;     var b = 2;     var c = {         name: 'zhufeng',         age: 10     } } task();

上面的 案例 a、b是放在stack, object對象c則存放在heap,當然因為js是類型語言中沒有一定要區分放在棧堆的概念。

隊列

隊列是一種操作受限制的線性表

特殊之處在于它只允許在表的前端進行刪除操作,而在表的后端進行插入操作

進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭

因為隊列只允許在一端插入,在另一端刪除,所以只有最早進入隊列的元素才能最先從隊列中刪除,故隊列又稱為先進先出線性表;也有一個通俗的說法:吃拉法則,最先吃的就拉出來

怎么理解JS棧和執行上下文

執行上線文(這節重點)

當函數運行時,會創建一個執行環境,這個執行環境就叫執行上下文(Execution Context)

執行上下文中會創建一個對象叫作變量對象(Value  Object),基礎數據類型都保存在變量對象中。這里說明一下,執行上下文中不僅僅有變量對象,還有很多的對象比如:this。

引用數據類型的值保存在堆里,我們通過操作對象的引用地址來操作對象

代碼示例

function task(){     var a = 1;     var b = {         name:'zhufei'     }     debugger     var c = [1,2,3]; }

這里大家可以看到,a是值是1直接存在棧中,而b、c是對象所以存的是對應的內存地址

怎么理解JS棧和執行上下文

下面的斷點大家也可以清晰的看到,當前的執行上下文,varliable object  存的是當前函數執行使用需要用到的變量,其他的沒喲

怎么理解JS棧和執行上下文

數據類型(補一個面試常問的)

JS中有七種基本數據類型

  • 六種基本數據類型 Boolean Null Undefined Number String Symbol

  • 一種引用類型 object {} [] /^$/ new Date() Math

到此,相信大家對“怎么理解JS棧和執行上下文”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

徐闻县| 资源县| 南丹县| 香格里拉县| 天长市| 抚宁县| 勐海县| 林州市| 丰原市| 五大连池市| 逊克县| 襄城县| 会理县| 嘉义县| 彰化县| 奎屯市| 平定县| 东台市| 象山县| 红安县| 宝兴县| 邓州市| 汉寿县| 文登市| 绥芬河市| 芜湖县| 长丰县| 平遥县| 奎屯市| 普定县| 洛宁县| 新宾| 富民县| 郎溪县| 万全县| 壤塘县| 沽源县| 常德市| 邯郸县| 汉中市| 洛浦县|