Maison > Article > interface Web > À propos de la différence entre les types de données de base et les types de données de référence dans js
Pile et tas
La pile est un espace mémoire alloué automatiquement, qui est automatiquement libéré par le système ; tandis que le tas est une mémoire allouée dynamiquement, et sa taille est variable et ne sera pas automatiquement libérée.
Types de base : segments de données simples stockés dans la mémoire de la pile, la taille des données est déterminée et la taille de l'espace mémoire peut être allouée.
Les types de données de base incluent Undefined, Null, Boolean, Number et String, leurs valeurs sont stockées directement sur la pile
Type de référence : la valeur de l'objet stocké dans la mémoire tas ; , représenté par Le pointeur d'adresse est composé d'une valeur. L'adresse est stockée dans la pile et la valeur réelle est stockée dans le tas. La taille de chaque espace dans le tas est différente et des allocations spécifiques sont effectuées en fonction de la situation. . Lorsque nous avons besoin d'accéder à la valeur d'un type de référence (comme un objet, un tableau, une fonction, etc.), nous obtenons d'abord le pointeur d'adresse de l'objet à partir de la pile, puis obtenons les données requises à partir de la mémoire tas
var s='str',t= 0,floatNum=1.1; var obj={ a:10, b:'Joel', c:function(){ console.log('function'); } }Comme indiqué ci-dessus : Les valeurs de type de données de base sont stockées dans la pile et l'objet les références des types référence sont stockées dans la pile. Les valeurs sont stockées dans le tas Résumé Différentes allocations de mémoire lors de la déclaration de variables : Types de base : données simples. segments stockés dans la pile, ils La valeur est stockée directement à l'emplacement où la variable est accédée. En effet, l'espace occupé par les types de base est fixe, ils peuvent donc être stockés dans une zone mémoire plus petite - la pile, afin que la valeur de la variable puisse être rapidement interrogée. Type de référence : Objet stocké dans le tas. La valeur stockée dans la pile est un pointeur (point) utilisé pour pointer vers l'adresse mémoire de l'objet stocké. En effet, la taille de la valeur du type de référence sera. change , il ne peut donc pas être placé sur la pile, sinon cela réduira la vitesse de recherche des variables. Au contraire, la valeur stockée sur la pile est l'adresse de l'objet et la taille de l'adresse est fixe, donc son stockage sur la pile n'a aucun impact sur les performances variables. Différents mécanismes d'allocation de mémoire entraînent également différents mécanismes d'accès En javascript, l'accès direct aux objets stockés dans la mémoire tas n'est pas autorisé, donc lorsque vous accédez à un objet, accédez d'abord à la pile mémoire pour obtenir le adresse de l'objet dans le tas mémoire, puis suivez cette adresse pour obtenir la valeur dans l'objet C'est l'accès légendaire par référence, alors que la valeur du type de base est directement dans la pile mémoire. Différences lors de la copie de variablesTypes de base : lorsqu'une variable contenant la valeur d'origine est copiée dans une autre variable, une copie de la valeur d'origine sera attribuée à la nouvelle variable. deux Les variables sont complètement indépendantes, elles ont juste la même valeur. Type de référence : lorsqu'une variable contenant l'adresse mémoire d'un objet est copiée dans une autre variable, l'adresse mémoire sera attribuée à la nouvelle variable, ce qui signifie que les deux variables pointent vers la mémoire du tas pour la même chose. objet, les modifications apportées par l’un d’eux seront reflétées dans l’autre. (Une chose à comprendre ici est que lors de la copie d'un objet, un objet identique ne sera pas généré dans la mémoire tas, mais il y aura une variable supplémentaire qui contient le pointeur vers l'objet.) Il y a un pointeur supplémentaire. Différences dans le passage des paramètres (le processus de copie des paramètres réels vers des paramètres formels) Les paramètres de toutes les fonctions dans ECMAScript sont transmis par valeur, mais pourquoi les types primitifs et les types de référence sont-ils impliqués ? il y a encore une différence quand la valeur de ? Ce n'est pas seulement dû à la différence d'allocation de mémoire.
Type de données de base : faites simplement une copie de la valeur dans la variable et transmettez-la au paramètre. Après cela, le paramètre et la variable n'ont aucune influence l'un sur l'autre.
Type de référence : étant donné que la valeur qu'il transmet est une adresse mémoire, ils pointent tous vers le même objet
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!