91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

JavaScript塊級作用域的實現原理是什么

發布時間:2022-02-07 09:21:35 來源:億速云 閱讀:123 作者:iii 欄目:web開發

這篇文章主要講解了“JavaScript塊級作用域的實現原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript塊級作用域的實現原理是什么”吧!

JavaScript塊級作用域的實現原理是什么

作用域與執行上下文

很多人覺得作用域與執行上下文是一個概念,這種想法是完全錯誤的!

作用域

作用域在函數聲明時就已經確定了,作用域是據名稱來查找變量的一套規則,也就是確定了當前執行代碼對變量的訪問權限。JavaScript一共支持三種類型的作用域,它們分別是:全局作用域、函數作用域、塊級作用域。

執行上下文

執行上下文是js引擎從解釋到運行中間預編譯時對執行做的準備工作,創建了當前區域的執行環境,這個執行環境就是執行上下文。

執行棧

調用棧用來裝js代碼中的各種執行上下文,是js引擎追蹤函數執行的一個機制。

以下面的代碼為例:

console.log(1);
function pFn() {
    console.log(2);
    (function cFn() {
        console.log(3);
    }());
    console.log(4);
}
pFn();
console.log(5);
//輸出:1 2 3 4 5

先有全局環境下的執行上下文,調用pFn后將函數環境pFn的執行上下文壓入棧中,由于pFn中執行了cFn函數,所以繼續壓入cFn函數的執行上下文,執行完畢后依次出棧。

全局上下文只有應用程序退出前才會被銷毀,比如關閉網頁或者退出瀏覽器

JavaScript塊級作用域的實現原理是什么

javascript 是如何支持塊級作用域的

我們知道在js中由于初始設計的不規范,用var關鍵字定義變量會導致變量提升等一系列問題,但為了保持兼容性,我們也不得不對var聲明變量這種方式保留支持,那么:JavaScript是如何做到既要支持變量提升,又要支持塊級作用域的呢?

我們以下面這段代碼為例:

function foo() {
   var a = 1;
   let b = 2;
   {
   let b = 3;
   var c = 4;
   let d = 5;
   console.log(a);
   console.log(b);
   }
   console.log(b);
   console.log(c);
   console.log(d);
}

首先函數內部通過var聲明的變量被存放到變量環境中,通過let聲明的變量在預編譯階段被存放到詞法環境中,當然在函數體內部塊作用域中let聲明的變量并沒有被存放到詞法環境中。

JavaScript塊級作用域的實現原理是什么

繼續執行代碼,當執行到代碼塊里面時,變量環境中的a的值已經被設置為1,詞法環境中b的值已經被設置成了2,注意用let聲明的變量b和d此時不是underfined而是uninitialized未初始化

JavaScript塊級作用域的實現原理是什么

最后當函數體內塊作用域執行結束之后,其內部變量就會從詞法環境的棧頂彈出

JavaScript塊級作用域的實現原理是什么

感謝各位的閱讀,以上就是“JavaScript塊級作用域的實現原理是什么”的內容了,經過本文的學習后,相信大家對JavaScript塊級作用域的實現原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

仙游县| 老河口市| 新营市| 呼玛县| 济阳县| 武平县| 玉龙| 垫江县| 龙南县| 井陉县| 新乐市| 永安市| 德令哈市| 北流市| 富川| 瑞安市| 长岛县| 峨山| 南溪县| 泽库县| 盐山县| 塘沽区| 玉环县| 桦川县| 黎城县| 阿瓦提县| 玉龙| 仁寿县| 大丰市| 清流县| 衡水市| 株洲县| 新巴尔虎左旗| 葫芦岛市| 新和县| 沈丘县| 闻喜县| 南召县| 屯留县| 曲阜市| 武强县|