成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

javascript - 閉包定義及應用場景

Xufc / 2916人閱讀

摘要:什么是閉包閉包是指有權訪問另一個函數(shù)作用域中的變量的函數(shù)。在內存中維持一個變量。

什么是閉包

閉包是指有權訪問另一個函數(shù)作用域中的變量的函數(shù)。

function createFunc() {
    var name = "wheeler";
    return function () {
        return name;
    }
}

var nameFunc = createFunc();  // nameFunc是一個閉包

var name = nameFunc();

console.log(name);

// 解除對匿名函數(shù)的應用(以便釋放內存)
nameFunc=null;

內部函數(shù)可以訪問外部函數(shù)的變量name,內部函數(shù)的作用域包含了外部函數(shù)的作用域
(由于閉包會攜帶包含它的函數(shù)的作用域,可能導致內存占用過多,因此謹慎使用閉包)

可以通過模仿塊級作用域減少閉包導致的內存占用過多
// 塊級作用域(通常稱為私有作用域)的匿名函數(shù)的語法
(function(){
    // 塊級作用域
})();

將閉包定義在塊級作用域里面

// 可以減少閉包占用的內存問題,因為沒有指向匿名函數(shù)的引用。只要函數(shù)執(zhí)行畢,就可以立即銷毀其作用域鏈了
(function(){
    function createFunc() {
        var name = "wheeler";
        return function () {
            return name;
        }
    }

    var nameFunc = createFunc();

    var name = nameFunc();

    console.log(name);
})();
閉包的應用場景

用閉包模擬私有方法

var returnNum = (function () {
    var num = 0;

    function changeNum(value) {
        num = value;
    }

    return {
        add: function () {
            changeNum(10);
        },
        delete: function () {
            changeNum(-10);
        },
        getNum: function () {
            return num;
        }
    }
})();

// 閉包
console.log(returnNum.getNum());
returnNum.add();
console.log(returnNum.getNum());
returnNum.delete();
console.log(returnNum.getNum());

緩存

var CacheCount = (function () {
    var cache = {};
    return {
        getCache: function (key) {
            if (key in cache) {// 如果結果在緩存中
                return cache[key];// 直接返回緩存中的對象
            }
            var newValue = getNewValue(key); // 外部方法,獲取緩存
            cache[key] = newValue;// 更新緩存
            return newValue;
        }
    };
})();

console.log(CacheCount.getCache("key1"));

封裝

var person = function(){
    var name = "default";//變量作用域為函數(shù)內部,外部無法訪問
    return {
        getName : function(){
            return name;
        },
        setName : function(newName){
            name = newName;
        }
    }
}();

console.log(person.name);// undefined
console.log(person.getName());
person.setName("wheeler");
console.log(person.getName());

setTimeout

function func(param) {
    return function() {
        console.log(param);
    }
}
var myFunc = func("wheeler");
setTimeout(myFunc, 1000);

保護函數(shù)內的變量安全。

在內存中維持一個變量。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/97618.html

相關文章

  • JavaScript閉包

    摘要:此時的作用域鏈包含了兩個對象的活動對象和對象。閉包的應用場景保護函數(shù)內的變量安全。依然如前例,由于閉包,函數(shù)中的一直存在于內存中,因此每次執(zhí)行,都會給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過程中經常出現(xiàn)問題的地方。每次看文章都會有所了解閉包,但是,用起來還是不對,而且錯誤百出,其關鍵問題還是出在對其不理解,不了解。此文章會不定期更新以及完善,希望在我學習的時候,讓大家也...

    Tony 評論0 收藏0
  • this指針使用call(),apply()bind()的使用

    摘要:目錄一理解指針意義二用解決指針指向問題三的使用場景與少用之處一理解指針意義讓我們先理解好指針的定義引用的是函數(shù)執(zhí)行的環(huán)境對象永遠指向的是最后調用它的對象,也就是看它執(zhí)行的時候是誰調用的通俗地講,就是誰調用,就指向誰我們分類舉例舉例前先看下本 目錄 一.理解this指針意義二.用call(),apply(),bind()解決指針指向問題三.bind()的使用場景與少用之處 一.理解thi...

    iKcamp 評論0 收藏0
  • JavaScript:萬惡的 this 拿命來(三)

    摘要:閉包執(zhí)行上下文決定了變量作用域而閉包,它其實是一種決策,是一種模式,讓我們可以靈活的改變變量作用域。所以,在本質上,閉包就是將函數(shù)內部和函數(shù)外部連接起來的一座橋梁。只要咱們弄明白閉包,其中的自然跑不掉。 閉包 this 執(zhí)行上下文決定了變量作用域 而閉包,它其實是一種決策,是一種模式,讓我們可以靈活的改變變量作用域。 按慣例,上栗子 var global = glo...

    Cympros 評論0 收藏0
  • 閉包

    摘要:閉包在計算機科學中,閉包是詞法閉包的簡稱,是引用了自由變量的函數(shù)。所以,有另一種說法認為閉包是由函數(shù)和與其相關的引用環(huán)境組合而成的實體。通過閉包完成了私有的成員和方法的封裝。 閉包 在計算機科學中,閉包(Closure)是詞法閉包(Lexical Closure)的簡稱,是引用了自由變量的函數(shù)。這個被引用的自由變量將和這個函數(shù)一同存在,即使已經離開了創(chuàng)造它的環(huán)境也不例外。所以,...

    ccj659 評論0 收藏0
  • 一篇文章搞懂閉包。

    摘要:如果非要用一句話定義閉包我更加認同你不知道的作者的一句話當函數(shù)可以記住并訪問所在的詞法作用域時,就產生了閉包。所以本文將會從閉包的應用場景入手,來印證的這句話。總結閉包的應用場景還有很多,可以說是隨處可見了。 直接進入主題,閉包是什么? 閉包是寫代碼過程產生的一種自然結果,而不是一種概念。 相比于一些概念性的解釋,更重要的是熟悉它的應用場景、及常見寫法。 如果非要用一句話定義閉包:我...

    tinyq 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<