js函数内部修改外部变量

来源:segmentfault.com 更新时间:2023-05-25 21:55
let test = 0;
function fn(){
    test++;
 }
 fn(); // test == 1 这样就行了

参数t当然不是指向test了,因为test是原始类型,原始类型是值传递的方式,就是说只是把值copy一份传递给了对方变量;而引用类型是引用(共享)传递,引用类型的值是指向的对象的指针,传递时是把这个指针copy一份传递给对方变量,修改对方变量就是在修改原始变量,因为他们指向同一个内存地址,同一个对象。

let foo = { counter: 0};
function fn(){
    fn2(foo);
}
function fn2(t){
    t.counter++;
}
fn();// foo.counter == 1;//这样就达到题主要的效果了

引用(共享)传递也可以说是值传递的一种,只是传递的值比较特殊,是个指针。