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
Tout d'abord,
var a
ouvrira un espace dansstack
, puis vous l'attribuerez à unefonction
, qui est un type de référence, puis dansheap
s'applique à un autre espace pour stocker lafonction
À ce stade,a
dans lapile
stockeLe. adresse de fonction
var a
会在stack
里面开一块空间,然后你将他赋给一个function
,是一个引用类型,于是又在heap
里面又申请一块空间存放function
,此时,stack
里面的a
存放的是function
的地址而下面,将
b
赋值给a
,是将stack
里面a
指向的heap
里面function
的地址赋给b
,所以这就是为什么后来a
指向了null
,但是b
仍然指向之前heap
里面function
的原因。如何销毁?将
Et ci-dessous, attribuezb
也设置为null
b
àa
, qui est leheapa
dans lapile
L'adresse de lafonction
dans /code> est attribuée àb
, c'est pourquoi plus tarda
pointe versnull
, mais la raison pour laquelleb
pointe toujours vers lafonction
dans letas
précédent. 🎜 🎜Comment détruire ? Définissez simplementb
surnull
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 :
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é
.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é. .