La façon dont vous l'écrivez ci-dessus consiste simplement à rendre les test的值当成参数,传进去了fn2里面而已,fn2里面的参数t仅仅只是和testvaleurs identiques. Si vous souhaitez modifier des variables externes à l'intérieur de la fonction, vous pouvez écrire comme ceci.
var test=3
function fn2(){
test++;
}
fn2();
console.log(test)
//也可以这样写
var test=3
function fn2(t){
return ++t;
}
test=fn2(test);
test=fn2(10);
Le questionneur a déjà répondu "Comment modifier les variables externes"...
let test = 0;
function fn(){
test++;
}
fn(); // test == 1 这样就行了
Les
Paramètrest当然不是指向test了,因为test sont des types primitifs, et les types primitifs sont des transfert de valeur, ce qui signifie que seule une copie de la valeur est transmise à la variable de l'autre partie tandis que les types de référence sont un transfert de référence (partagé), et la valeur du ; Le type de référence est pointé. Lors du passage du pointeur d'objet, une copie du pointeur est transmise à la variable de l'autre partie. Modifier la variable de l'autre partie modifie la variable d'origine, car ils pointent vers la même adresse mémoire et le même objet.
let foo = { counter: 0};
function fn(){
fn2(foo);
}
function fn2(t){
t.counter++;
}
fn();// foo.counter == 1;//这样就达到题主要的效果了
Le
Le passage de référence (partagé) peut également être considéré comme un type de le passage de valeur, mais la valeur transmise est assez spéciale, c'est un pointeur.
Les fonctions Javascript passent toutes par valeur plutôt que par référence. Il n'y a aucune relation entre t et test sauf qu'elles ont la même valeur.
En savoir plus sur la transmission de valeurs et la transmission de références en js. Si vous devez écrire comme ceci, vous pouvez encapsuler la variable de test dans un objet, puis transmettre l'objet à cette fonction pour modification.
var obj = {
test:0
}
function fn(){
fn2(obj);
}
function fn2(obj){
obj.test++;
}
fn();
Les types de base de JavaScript n'ont ni pointeurs ni références ; Object dit le contraire, c'est donc la seule astuce.
var global = {
test1: 1,
test2: 2
}
function fn () {
changeByPointer('test1')
}
function fn2() {
changeByPointer('test2')
}
function changeByPointer (pointer) {
// do something
global[pointer] ++
}
La façon dont vous l'écrivez ci-dessus consiste simplement à rendre les
test
的值当成参数,传进去了fn2
里面而已,fn2
里面的参数t
仅仅只是和test
valeurs identiques.Si vous souhaitez modifier des variables externes à l'intérieur de la fonction, vous pouvez écrire comme ceci.
Le questionneur a déjà répondu "Comment modifier les variables externes"...
LesParamètres
Let
当然不是指向test
了,因为test
sont des types primitifs, et les types primitifs sont des transfert de valeur, ce qui signifie que seule une copie de la valeur est transmise à la variable de l'autre partie tandis que les types de référence sont un transfert de référence (partagé), et la valeur du ; Le type de référence est pointé. Lors du passage du pointeur d'objet, une copie du pointeur est transmise à la variable de l'autre partie. Modifier la variable de l'autre partie modifie la variable d'origine, car ils pointent vers la même adresse mémoire et le même objet.Le passage de référence (partagé) peut également être considéré comme un type de le passage de valeur, mais la valeur transmise est assez spéciale, c'est un pointeur.
Les fonctions Javascript passent toutes par valeur plutôt que par référence. Il n'y a aucune relation entre t et test sauf qu'elles ont la même valeur.
Changez-le directement, pas besoin de transmettre la valeur
En savoir plus sur la transmission de valeurs et la transmission de références en js.
Si vous devez écrire comme ceci, vous pouvez encapsuler la variable de test dans un objet, puis transmettre l'objet à cette fonction pour modification.
Les types de base de JavaScript n'ont ni pointeurs ni références ; Object dit le contraire, c'est donc la seule astuce.