javascript - Comment modifier une variable externe dans une fonction
给我你的怀抱
给我你的怀抱 2017-06-28 09:26:51
0
7
1039

Comme mentionné, le code est le suivant :

var test = 0;
function fn(){
    //...
    fn2(test);//调用另一个方法,传入全局变量test
}
function fn2(t){
    t++;//修改传入的变量,但是全局变量并没有受影响,这里的t不是一个指向全局test的路径吗?
    }

Résolvez vos doutes

给我你的怀抱
给我你的怀抱

répondre à tous(7)
学霸

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.

扔个三星炸死你

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.

    var obj = {
        test:0
    }
    function fn(){
        fn2(obj);
    }
    function fn2(obj){
        obj.test++;
    }
    fn();
巴扎黑
var test = 0;
function fn(){
   test++;//这样就行了,这里的test操作的是全局变量 test
}
function fn2(t){
   t++;//这样是不行的,因为这里t是局部变量,改变的是局部变量t的值,相当于 var t = test;  t++;
}
習慣沉默

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] ++
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal