Comme mentionné, le code est le suivant?:
var test = 0;
function fn(){
//...
fn2(test);//調(diào)用另一個(gè)方法,傳入全局變量test
}
function fn2(t){
t++;//修改傳入的變量,但是全局變量并沒有受影響,這里的t不是一個(gè)指向全局test的路徑嗎?
}
Résolvez vos doutes
La fa?on dont vous l'écrivez ci-dessus consiste simplement à rendre les test
的值當(dāng)成參數(shù),傳進(jìn)去了fn2
里面而已,fn2
里面的參數(shù)t
僅僅只是和test
valeurs 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
當(dāng)然不是指向test
了,因?yàn)?code>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;//這樣就達(dá)到題主要的效果了
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++;//這樣是不行的,因?yàn)檫@里t是局部變量,改變的是局部變量t的值,相當(dāng)于 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] ++
}