javascript - Résoudre quelques problèmes mineurs avec les fonctions js
为情所困
为情所困 2017-05-19 10:26:59
0
5
557

Puisque le nom de la fonction js est un pointeur vers l'objet fonction, fait-il référence à la mémoire ?
`

        var a=function(c){
            return  ++c;
        }
        console.log(a(1));

        var b=a;
        console.log(b(1));

        var a=null;
        console.log(b);
        console.log(b(1));

` , alors comment faire une destruction manuelle ? Les variables globales doivent-elles être fermées avant que le navigateur ne soit recyclé ? Merci pour la solution

为情所困
为情所困

répondre à tous(5)
迷茫

Tout d'abord, var a ouvrira un espace dans stack, puis vous l'attribuerez à une fonction, qui est un type de référence, puis dans heap s'applique à un autre espace pour stocker la fonction À ce stade, a dans la pile stocke Le. adresse de fonctionvar a会在stack里面开一块空间,然后你将他赋给一个function,是一个引用类型,于是又在heap里面又申请一块空间存放function,此时,stack里面的a存放的是function的地址

而下面,将b赋值给a,是将stack里面a指向的heap里面function的地址赋给b,所以这就是为什么后来a指向了null,但是b仍然指向之前heap里面function的原因。

如何销毁?将b也设置为null

Et ci-dessous, attribuez b à a, qui est le heapa dans la pile L'adresse de la fonction dans /code> est attribuée à b, c'est pourquoi plus tard a pointe vers null, mais la raison pour laquelle b pointe toujours vers la fonction dans le tas précédent. 🎜 🎜Comment détruire ? Définissez simplement b sur null ou une autre valeur. Essayez donc de ne pas écrire de variables globales pour ce type de variables, écrivez des variables locales. 🎜
滿天的星座

Est-ce une référence à la mémoire ? Cette question est un peu trop large. Les données sont stockées dans la mémoire, il est donc naturel de référencer la mémoire
Mais ce n'est pas aussi simple que de référencer la mémoire. pour stocker les données, et la relation entre les données ne peut pas être reflétée, donc ce n'est pas directement faisant référence à la mémoire
Il y a un traitement caché au milieu. Il existe une théorie de base sur la façon de le faire fonctionner, mais en fait peu de gens. connaître les détails spécifiques, c'est un niveau trop bas

De plus, il existe deux façons de recycler :

1, 设置null, 等待自动清空
a = null;
会在回收程序执行的时候自动清空
2, 立刻清空
delete a;
直接执行回收
但老ie并不支持这种操作

En général, utilisez simplement la méthode 1. Ne vous inquiétez pas du débordement. Le recyclage automatique sera déclenché par divers déclencheurs, tels que le timing, par exemple lorsque les données atteignent une certaine quantité

.
伊谢尔伦
     // 那么在最后应该将 op 解除引用来避免内存泄漏。
     // 所谓的内存泄露,就是被分配的内存既不能被使用,也不能够被回收的一个现象。
     // 低版本的IE浏览器中,DOM对象与javascript对象形成循环引用,
     // 那么就有可能产生内存泄露,除非人为的切断引用。

     function box() {
        var op = document.getElementById('op');
        var text = op.innerHTML;
        op.onclick = function () {
            alert(text);
         };
         op = null; //解除引用
     }
        
    box();
        
    // 节省内存
    // PS:如果并没有使用解除引用,那么需要等到浏览器关闭才得以释放。
漂亮男人

js peut utiliser delete pour recycler manuellement les variables

黄舟

À propos du mécanisme de récupération de place :
Sous l'ancienne version d'IE, le DOM se présente sous la forme d'un objet COM et est effacé à l'aide du comptage de références. S'il y a des références circulaires, il n'y aura jamais de chance de libérer la mémoire.
Dans les navigateurs standards, il s'agit de la méthode d'effacement des marques. Il vous suffit de libérer manuellement la référence et de la définir sur null pour libérer la mémoire.

Si la référence n'est pas déréférencée, la mémoire ne sera pas libérée tant que l'environnement d'exécution n'est pas quitté, et l'objet variable globale ne sera pas libéré tant que l'environnement d'exécution global ne sera pas libéré, c'est-à-dire qu'il ne sera pas libéré tant que le navigateur ne sera pas fermé. .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal