Maison > Questions et réponses > le corps du texte
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
欧阳克2017-06-28 09:28:51
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.
var test=3
function fn2(){
test++;
}
fn2();
console.log(test)
//也可以这样写
var test=3
function fn2(t){
return ++t;
}
test=fn2(test);
test=fn2(10);
PHP中文网2017-06-28 09:28:51
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.
阿神2017-06-28 09:28:51
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.
滿天的星座2017-06-28 09:28:51
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();
巴扎黑2017-06-28 09:28:51
var test = 0;
function fn(){
test++;//这样就行了,这里的test操作的是全局变量 test
}
function fn2(t){
t++;//这样是不行的,因为这里t是局部变量,改变的是局部变量t的值,相当于 var t = test; t++;
}
習慣沉默2017-06-28 09:28:51
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] ++
}