Maison  >  Questions et réponses  >  le corps du texte

Qu’est-ce que le garbage collection JavaScript ?

<p>Qu'est-ce que le garbage collection JavaScript ? Pour les programmeurs Web, il est important de comprendre l’importance du garbage collection JavaScript afin d’écrire un meilleur code. </p>
P粉334721359P粉334721359430 Il y a quelques jours537

répondre à tous(2)je répondrai

  • P粉033429162

    P粉0334291622023-08-18 09:23:54

    Méfiez-vous des références circulaires lorsqu'il s'agit d'objets DOM :

    Modèles de fuite de mémoire en JavaScript

    N'oubliez pas que la mémoire ne peut être récupérée que lorsqu'il n'y a aucune référence active à l'objet. Il s'agit d'un piège courant avec les fermetures et les gestionnaires d'événements, car certains moteurs JS ne vérifient pas les variables réellement référencées dans la fonction interne et conservent simplement toutes les variables locales de la fonction englobante.

    Voici un exemple simple :

    function init() {
        var bigString = new Array(1000).join('xxx');
        var foo = document.getElementById('foo');
        foo.onclick = function() {
            // 即使`bigString`在任何地方都没有被引用,这可能会创建对`bigString`的闭包!
        };
    }

    Une implémentation JS naïve ne peut pas collecter tant que le gestionnaire d'événements existe bigString。有几种解决这个问题的方法,例如在init()的末尾设置bigString = nulldelete对于局部变量和函数参数不起作用: delete从对象中删除属性,而变量对象是不可访问的 - 在严格模式下的ES5甚至会抛出ReferenceError si vous essayez de supprimer la variable locale ! ).

    Je recommande d'essayer d'éviter les fermetures inutiles si vous vous souciez de la consommation de mémoire.

    répondre
    0
  • P粉547170972

    P粉5471709722023-08-18 00:17:21

    Eric Lippert a écrit il y a quelque temps un article de blog détaillé qui parle de ce sujet (et le compare à VBScript). Pour être plus précis, il a écrit sur JScript, la propre implémentation d'ECMAScript par Microsoft, bien que très similaire à JavaScript. Je suppose que vous pouvez supposer que la plupart du comportement est le même dans le moteur JavaScript d'Internet Explorer. Bien entendu, l’implémentation spécifique varie d’un navigateur à l’autre, mais je suppose que vous pouvez appliquer certains principes communs à d’autres navigateurs.

    Cité de cette page :

    L'objectif principal du garbage collection est de libérer les programmeurs de la nécessité de se soucier de la gestion de la mémoire des objets qu'ils créent et utilisent, bien que cela soit parfois inévitable - il est toujours bénéfique d'avoir au moins une compréhension générale du fonctionnement du garbage collection.

    Note historique : Une version antérieure de la réponse contenait une référence incorrecte à l'opérateur delete. En JavaScript, l'opération delete. L'opérateur delete运算符的错误引用。在JavaScript中,delete运算符从对象中删除属性,与C/C++中的delete supprime les attributs d'un objet, ce qui est complètement différent de delete en C/C++.

    répondre
    0
  • Annulerrépondre