Maison  >  Article  >  interface Web  >  Passer les paramètres par valeur dans la fonction js

Passer les paramètres par valeur dans la fonction js

小云云
小云云original
2018-01-18 14:43:051804parcourir

Cet article partage principalement avec vous un exemple de passage de paramètres par valeur dans une fonction js. Il a une très bonne valeur de référence. Suivons l'éditeur pour y jeter un œil. peut aider tout le monde.

La méthode de transmission des paramètres de fonction dans js se fait par valeur. Dans des circonstances normales, la modification de la valeur des paramètres de fonction n'affectera pas les variables en dehors de la fonction. Par exemple :

'use strict';
var list = [1, 2, 3];
list.forEach(function(item) {
 item ++;
});
console.log(list); // [ 1, 2, 3 ]

En effet, lorsqu'une fonction js reçoit un paramètre, elle génère une variable de copie, qui est égale à la valeur du paramètre. Vous pouvez analyser le fonctionnement de js comme ceci : <.>

'use strict';
var list = [1, 2, 3];
list.forEach(function(item, i) {
 // 第一个item是副本,第二个item是数组元素list[i]
 var item = item;
 // 副本item++
 item ++;
 // 打印的是副本的值
 console.log(item); // 2, 3, 4
});
// 原数组不会改变
console.log(list); // [ 1, 2, 3 ]
Mais que se passe-t-il si le paramètre de fonction reçoit un objet ?


'use strict';var list = [{a: 1, b: 2}];
list.forEach(function(item) {
 item.a ++;
});
console.log(list); // [ { a: 2, b: 2 } ]
J'ai découvert que la valeur de la variable externe de la fonction était en fait modifiée à l'intérieur de la fonction. Alors pourquoi ?

Analysons comment js exécute ce code


'use strict';
var list = [{a: 1, b: 2}];
list.forEach(function(item, i) {
 // 第一个item是副本,第二个item是数组元素list[i]
 var item = item;
 // 此时item和list[i]指向的是同一地址,故两者完全一样
 console.log(item === list[i]); // true
 // 此时item.a++ 亦即 list[i].a++
 item.a ++;
 // list[i]的值已经改变
 console.log(list[i]); // { a: 2, b: 2 }
});
console.log(list); // [ { a: 2, b: 2 } ]
Alors pourquoi cela se produit-il ?

Puisque les objets en js sont des types référence, var item = item équivaut à attribuer l'adresse de list[i] à item. Les deux pointent vers l'adresse de l'objet d'origine, donc via Quand on modifie un. valeur, cela modifie en fait l’objet vers lequel ils pointent. Dans l'exemple, la valeur de l'objet d'origine est modifiée via la méthode item.a++, donc [ { a: 2, b: 2 } ] devrait être affiché à la fin.

Recommandations associées :


Comment transmettre des paramètres lorsque la page saute en HTML

Exemples de définition de référence PHP et de paramètres de passage de référence Explication détaillée de l'utilisation

Explication détaillée de la syntaxe de base des fonctions PHP et exemples d'utilisation de paramètres de passage

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