Heim >Web-Frontend >js-Tutorial >Was ist die Definition von Schließung in js? Anwendungsszenarien des js-Abschlusses

Was ist die Definition von Schließung in js? Anwendungsszenarien des js-Abschlusses

不言
不言Original
2018-09-10 17:29:052925Durchsuche

Was dieser Artikel Ihnen bringt, ist, was die Definition des Abschlusses in js ist. Die Anwendungsszenarien des js-Abschlusses haben einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen.

Was ist ein Abschluss?

Ein Abschluss ist eine Funktion, die Zugriff auf eine Variable im Gültigkeitsbereich einer anderen Funktion hat.

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

var nameFunc = createFunc();  // nameFunc是一个闭包

var name = nameFunc();

console.log(name);

// 解除对匿名函数的应用(以便释放内存)
nameFunc=null;

Die interne Funktion kann auf den Variablennamen der externen Funktion zugreifen.
(Da der Abschluss den Gültigkeitsbereich der Funktion trägt, die ihn enthält , es kann zu viel Speicher belegen, also verwenden Sie Schließungen mit Vorsicht)

Sie können die durch Schließungen verursachte übermäßige Speichernutzung reduzieren, indem Sie Bereiche auf Blockebene imitieren

// 块级作用域(通常称为私有作用域)的匿名函数的语法
(function(){
    // 块级作用域
})();

Abschlüsse in Bereichen auf Blockebene definieren

// 可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行毕,就可以立即销毁其作用域链了
(function(){
    function createFunc() {
        var name = "wheeler";
        return function () {
            return name;
        }
    }

    var nameFunc = createFunc();

    var name = nameFunc();

    console.log(name);
})();

Anwendungsszenarien von Schließungen

  • Verwendung von Schließungen zur Simulation privater Methoden

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());
  • Cache

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"));
  • Paket

var person = function(){
    var name = "default";//变量作用域为函数内部,外部无法访问
    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);
  • Variablen innerhalb von Funktionen schützen.

  • Verwaltet eine Variable im Speicher.

Verwandte Empfehlungen:

Was ist ein js-Abschluss? JS-Abschluss verstehen (mit Code)

Was ist JS-Abschluss? Js-Abschluss verstehen

Das obige ist der detaillierte Inhalt vonWas ist die Definition von Schließung in js? Anwendungsszenarien des js-Abschlusses. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn