let a = [];
function test1(){
let ta = Math.random();
let tb = "test2";
let obj1 = {
t1: ta
}
a.push(obj1);
}
test1();
La fonction test1 libérera-t-elle toujours de la mémoire après l'avoir appelée ainsi ?
La variable globale a contient une référence à un objet, qui se trouve dans la fonction test1. Pourquoi est-ce que je pense que test1 ne libérera pas la mémoire ? S'il vous plaît, donnez-moi quelques conseils. . . .
a et test1 partagent un contexte d'exécution, c'est-à-dire que a et test1 coexistent et meurent~
Je ne sais pas si j'ai mal compris~Par exemple :
Après avoir exécuté le test, je pense que test1 sera publié, et a sera également publié.
S'il n'est pas dans une fonction mais directement sous la fenêtre, test1 existera toujours~
J'ai mal compris avant, cela devrait poser deux problèmes.
Après l'exécution, les variables de test1 ne sont pas directement référencées, donc l'environnement d'exécution de test1, c'est-à-dire le contexte, doit être recyclé. Ce n'est pas une fermeture. De plus, le corps de fonction de test1 lui-même est un attribut appartenant au contexte dans lequel il se trouve. Tant que le contexte est toujours là, le corps de fonction lui-même ne sera pas recyclé.
Parlons d'abord de la conclusion, n'est-ce pas
Tout d'abord, la définition de la fermeture est une fonction qui peut accéder à des variables libres, ce qui est incompatible avec la définition
Si vous avez mal compris
L'objet pointé parVeuillez modifier votre exemple
original obj1 existe également dans a, mais pensez-vous qu'il s'agit toujours d'une fermeture ?
Dans votre exemple, après l'exécution de test1, ta, tb et obj1 sont tous libérés.
.L'objet pointé par la variable obj1 qui y est créée est ajouté à la variable globale a. Après l'exécution de test1, a[0] Points. à cet objet. Puisque cet objet est référencé par a[0], il ne sera pas publié, mais cela n'a rien à voir avec obj1 La portée de obj1 n'a pas changé pendant tout le processus. pointé par l'objet obj1 au lieu de obj1
Je ne sais pas si vous pouvez comprendre cela. Mes compétences en chinois sont trop faibles et j'ai l'impression de ne pas pouvoir parler clairement = =