Maison  >  Article  >  interface Web  >  Passage de paramètres Js et copie de variables

Passage de paramètres Js et copie de variables

一个新手
一个新手original
2017-10-26 10:05:061756parcourir

Les variables ECMAScript peuvent contenir des valeurs de deux types de données différents : les valeurs de type primitif et les valeurs de type référence. Les valeurs de type primitif font référence à des segments de données simples, tandis que les valeurs de type référence font référence à des objets pouvant être composés de plusieurs valeurs.

  5 types de données de base : Indéfini, Null, Booléen, Nombre et Chaîne. Ces 5 types de données de base sont accessibles par valeur car la valeur réelle stockée dans la variable peut être manipulée. ES6 a un autre type de symbole.

  La valeur du type référence est un objet stocké en mémoire. JavaScript ne permet pas d'accéder directement à l'emplacement dans la mémoire, ce qui signifie que l'espace mémoire de l'objet ne peut pas être directement manipulé. Lorsque vous manipulez un objet, vous manipulez en réalité une référence à l'objet plutôt qu'à l'objet lui-même. A cet effet, les valeurs des types référence sont accessibles par référence.

Copier la valeur de la variable

  • 【Copier la valeur de la variable】 Copier la valeur d'une variable de type de base créera une nouvelle valeur sur l'objet variable, puis copiera la valeur dans Emplacement où la nouvelle variable est affectée. Les opérations sur n’importe quelle valeur de variable ne s’affectent pas.

  • [Copier le pointeur de référence] Copier la valeur d'une variable de type référence copiera également la valeur stockée dans l'objet variable dans l'espace alloué par la nouvelle variable. La différence est la suivante. de la valeur est en fait un pointeur vers un objet stocké dans le tas. Après la copie, les deux variables feront en réalité référence au même objet. Par conséquent, la modification d’une variable affectera une autre variable.

Passage de paramètres

  Tous les paramètres de fonction dans ECMAScript sont transmis par valeur. Il existe deux manières d'accéder aux variables : par valeur et par référence, tandis que les paramètres ne peuvent être transmis que par valeur.

  • Passage de paramètre de type de base : ce qui est transmis à la fonction est une copie de la valeur, et les modifications qui y sont apportées dans la fonction ne sont pas visibles de l'extérieur.

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2
  • Passage de paramètre de type référence : Ce qui est passé à la fonction est une référence à la valeur, et la modification de ses propriétés dans la fonction est visible en externe, mais utilise une nouvelle référence. Le remplacement ne sera pas visible en externe

var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
  a[0] = 4;    //对其属性的修改外部可见 
  var c = a;
  a = b;      //用新引用覆盖
  b = c;
  console.log(a);  //"5,6"        
  console.log(b);  //"4,2,3"
}
change(a,b);
console.log(a);    //"4,2,3"
console.log(b);    //"5,6"

a et b sont des variables dans la fonction de changement. Lors de l'appel de la fonction, les références de a et b. sont attribués à ces deux variables, mais cela ne peut pas changer a et b dans le monde global. Parce que l'écrasement par une nouvelle référence n'est pas visible de l'extérieur, car la fonction n'obtient que la référence et n'a aucun pouvoir pour modifier la référence.

var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"

 Parce que js n'a pas de portée au niveau du bloc, il ne peut pas trouver la variable a en cours de changement, et b ira consciemment à la couche supérieure pour la trouver, donc a et b ici sont des références à global variables.


☞☞☞Plongez en profondeur dans la série JavaScript☜☜☜

  Les variables ECMAScript peuvent contenir des valeurs de deux types de données différents : les valeurs de type de base et les valeurs de type de référence. Les valeurs de type primitif font référence à des segments de données simples, tandis que les valeurs de type référence font référence à des objets pouvant être composés de plusieurs valeurs.

  5 types de données de base : Indéfini, Null, Booléen, Nombre et Chaîne. Ces 5 types de données de base sont accessibles par valeur car la valeur réelle stockée dans la variable peut être manipulée. ES6 a un autre type de symbole.

  La valeur du type référence est un objet stocké en mémoire. JavaScript ne permet pas d'accéder directement à l'emplacement dans la mémoire, ce qui signifie que l'espace mémoire de l'objet ne peut pas être directement manipulé. Lorsque vous manipulez un objet, vous manipulez en réalité une référence à l'objet plutôt qu'à l'objet lui-même. A cet effet, les valeurs des types référence sont accessibles par référence.

Copier la valeur de la variable

  • 【Copier la valeur de la variable】 Copier la valeur d'une variable de type de base créera une nouvelle valeur sur l'objet variable, puis copiera la valeur dans Emplacement où la nouvelle variable est affectée. Les opérations sur n’importe quelle valeur de variable ne s’affectent pas.

  • [Copier le pointeur de référence] Copier la valeur d'une variable de type référence copiera également la valeur stockée dans l'objet variable dans l'espace alloué par la nouvelle variable. La différence est la suivante. de la valeur est en fait un pointeur vers un objet stocké dans le tas. Après la copie, les deux variables feront en réalité référence au même objet. Par conséquent, la modification d’une variable affectera une autre variable.

Passage de paramètres

  Tous les paramètres de fonction dans ECMAScript sont transmis par valeur. Il existe deux manières d'accéder aux variables : par valeur et par référence, tandis que les paramètres ne peuvent être transmis que par valeur.
Passage de paramètres de type de base : ce qui est transmis à la fonction est une copie de la valeur, et les modifications qui y sont apportées dans la fonction ne sont pas visibles de l'extérieur.

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2
  • Passage de paramètre de type référence : Ce qui est passé à la fonction est une référence à la valeur. La modification de ses propriétés dans la fonction est visible de l'extérieur, mais écrasement. avec une nouvelle référence sera invisible en externe

var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
  a[0] = 4;    //对其属性的修改外部可见 
  var c = a;
  a = b;      //用新引用覆盖
  b = c;
  console.log(a);  //"5,6"        
  console.log(b);  //"4,2,3"
}
change(a,b);
console.log(a);    //"4,2,3"
console.log(b);    //"5,6"

 a, b sont des variables dans la fonction de changement Lors de l'appel de la fonction, les références de a et b sont affectées à ces deux variables. , mais ils ne le sont pas. Vous ne pouvez pas modifier a et b globalement. Parce que l'écrasement par une nouvelle référence n'est pas visible de l'extérieur, car la fonction n'obtient que la référence et n'a aucun pouvoir pour modifier la référence.

var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"

 Parce que js n'a pas de portée au niveau du bloc, il ne peut pas trouver la variable a en cours de changement, et b ira consciemment à la couche supérieure pour la trouver, donc a et b ici sont des références à global variables.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn