Maison > interface Web > js tutoriel > 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

不言
Libérer: 2018-09-10 17:29:05
original
2920 Les gens l'ont consulté

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;
Copier après la connexion

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(){
    // 块级作用域
})();
Copier après la connexion

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);
})();
Copier après la connexion

  • 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());
Copier après la connexion
  • 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"));
Copier après la connexion
  • 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());
Copier après la connexion
  • setTimeout

function func(param) {
    return function() {
        console.log(param);
    }
}
var myFunc = func('wheeler');
setTimeout(myFunc, 1000);
Copier après la connexion
  • 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal