Maison  >  Article  >  interface Web  >  Quelle est la définition de la fermeture en js ? Scénarios d'application de la fermeture js

Quelle est la définition de la fermeture en js ? Scénarios d'application de la fermeture js

不言
不言original
2018-09-10 17:29:052888parcourir

Ce que cet article vous apporte, c'est quelle est la définition de la fermeture en js ? Les scénarios d'application de la fermeture js ont une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.

Qu'est-ce qu'une fermeture

Une fermeture est une fonction qui a accès à une variable dans la portée d'une autre fonction.

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

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

var name = nameFunc();

console.log(name);

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

La fonction interne peut accéder au nom de variable de la fonction externe. La portée de la fonction interne contient la portée de la fonction externe
(Puisque la fermeture portera la portée de la fonction qui. le contient, cela peut provoquer une consommation trop importante de mémoire, alors utilisez les fermetures avec prudence)

Vous pouvez réduire l'utilisation excessive de la mémoire causée par les fermetures en imitant les étendues au niveau du bloc

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

Définir des fermetures au niveau du bloc Scénarios d'application de fermetures dans le domaine

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

    var nameFunc = createFunc();

    var name = nameFunc();

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

  • Utiliser des fermetures pour simuler des méthodes privées

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

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);
  • Protégez les variables dans les fonctions.

  • Maintient une variable en mémoire.

Recommandations associées :

Qu'est-ce que la fermeture js ? Comprendre la fermeture js (avec code)

Qu'est-ce que la fermeture js ? Comprendre la fermeture js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn