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

溫馨提示×

溫馨提示×

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

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

JavaScript中的閉包原理是什么

發布時間:2020-12-05 09:49:05 來源:億速云 閱讀:143 作者:小新 欄目:web開發

小編給大家分享一下JavaScript中的閉包原理是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

要了解清楚js中的閉包制機,那么得先了解全局執行環境、塊級執行環境、函數執行環境、變量對象、環境棧、作用域鏈、摧毀執行環境。

全局執行環境

全局執行環境指的是最外層的執行環境。在web中全局執行環境被認為window對象,所以你在全局環境中創建的變量與函數都是對象的屬性和方法。

函數執行環境

函數執行環境指的是函數體。

塊級執行環境

塊級執行環境指的是塊級定義區域。

'use strict';
// 全局執行環境
// .....
{
    // 塊級執行環境
    // 代碼 ....
}

function func() {
   // 函數執行環境
   //... 
}

變量對象

每一個執行環境最有一個與之關聯的變量對象,變量對象中存儲當前環境中定義的變量與函數。在使用變量或函數時,都是在個變量對象上去尋找成員的。這個對象是無法訪問的,但是你可以在作用域鏈[scope]中查看到所定義的成員(如果沒有使用的話可能無法看到,這和優化有關)。

環境棧

每個函數或塊都有自己的執行環境。當執行流進入一個函數時,函數的環境就會被推入“環境棧”中。函數執行完后,棧將其彈出并銷毀變量對象,然后把控制權返回在給之前的執行環境。如果內執行環境的變量對象,被外部執行環境引用,那么內部環境變量對象就無法被銷毀(如:閉包)。

作用域鏈

作用域鏈是一個列表,存儲著與執行環境相關的變量對象,通過【scope】屬性可查看變量對象列表。

關系圖

JavaScript中的閉包原理是什么

實例講解

// 例子1:常見的函數嵌套

'use strict';
function a() {
    let x = 2;
    return function() {
        return x;
    }
}
let func = a(); // 返回a函數體內的 匿名函數
console.log(func()); // 在全局執行環境中,訪問a函數內部變量。 如果是非閉包函數,那么執行完后

我們來看一下,a函數體內匿名函數的作用域鏈。

JavaScript中的閉包原理是什么

[Scopes] : 是當前匿名函數的作用域鏈。

索引為 0 的:是a函數的執行環境的變量對象, x 表示 變量對象中的。

索引為 1 的:全局執行環境變量對象。

// 例子2:訪問塊內部變量

1:返回塊級內容函數 實現在全局執行環境中訪問塊級內容變量。

'use strict';
let func = null;
{
    let x = "你好";
    func = function () {
        return x;
    }
}
// 返回塊級內容函數 實現在全局執行環境中訪問塊級內容變量。
console.log(func());

作用域鏈圖:

JavaScript中的閉包原理是什么

看完了這篇文章,相信你對JavaScript中的閉包原理是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

藁城市| 蓬溪县| 桂平市| 牟定县| 句容市| 根河市| 商南县| 金阳县| 闽清县| 桂林市| 沙湾县| 微山县| 织金县| 阿克| 阿拉善右旗| 高邑县| 安仁县| 嵩明县| 运城市| 和顺县| 龙岩市| 丽水市| 苏尼特右旗| 牡丹江市| 宝山区| 同江市| 靖宇县| 镇安县| 盐津县| 长垣县| 七台河市| 额敏县| 墨竹工卡县| 咸阳市| 潞城市| 刚察县| 十堰市| 收藏| 铜山县| 乐山市| 乌鲁木齐县|