cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk mengubah suai pembolehubah luaran di dalam fungsi

Seperti yang dinyatakan, kodnya adalah seperti berikut:

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

Selesaikan keraguan anda

给我你的怀抱给我你的怀抱2801 hari yang lalu1087

membalas semua(7)saya akan balas

  • 欧阳克

    欧阳克2017-06-28 09:28:51

    Cara anda menulisnya di atas hanyalah untuk menjadikan test的值当成参数,传进去了fn2里面而已,fn2里面的参数t仅仅只是和testnilai ​​sama.
    Jika anda ingin mengubah suai pembolehubah luaran di dalam fungsi, anda boleh menulis seperti ini.

    var test=3
    function fn2(){
        test++;
    }
    fn2();
    console.log(test)
    //也可以这样写
    var test=3
    function fn2(t){
        return ++t;
    }
    test=fn2(test);
    test=fn2(10);
    

    balas
    0
  • PHP中文网

    PHP中文网2017-06-28 09:28:51

    Penyoal telah pun menjawab "Cara mengubah suai pembolehubah luaran"...

    let test = 0;
    function fn(){
        test++;
     }
     fn(); // test == 1 这样就行了

    Parametert当然不是指向test了,因为test ialah jenis primitif, dan jenis primitif ialah pindahan nilai, yang bermaksud bahawa hanya salinan nilai dihantar kepada pembolehubah pihak lain manakala jenis rujukan ialah pindahan rujukan (dikongsi), dan nilai jenis rujukan dihalakan kepada Apabila melepasi penuding objek, salinan penuding dihantar kepada pembolehubah pihak lain Mengubah suai pembolehubah pihak lain adalah mengubah suai pembolehubah asal, kerana mereka menunjuk ke alamat memori yang sama dan objek yang sama.

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

    Reference (shared) passing boleh juga dikatakan sejenis value passing, tapi value lulus tu agak istimewa, ia adalah pointer.

    balas
    0
  • 阿神

    阿神2017-06-28 09:28:51

    Fungsi Javascript semuanya lulus mengikut nilai dan bukannya dengan rujukan Tiada hubungan antara t dan ujian kecuali ia mempunyai nilai yang sama.

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:28:51

    Cuma tukar terus, tak perlu pass nilai

    balas
    0
  • 滿天的星座

    滿天的星座2017-06-28 09:28:51

    Ketahui lebih lanjut tentang hantaran nilai dan hantaran rujukan dalam js.
    Jika anda mesti menulis seperti ini, anda boleh merangkum pembolehubah ujian ke dalam Objek, dan kemudian menyerahkan objek kepada fungsi ini untuk pengubahsuaian.

        var obj = {
            test:0
        }
        function fn(){
            fn2(obj);
        }
        function fn2(obj){
            obj.test++;
        }
        fn();

    balas
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:28:51

    var test = 0;
    function fn(){
       test++;//这样就行了,这里的test操作的是全局变量 test
    }
    function fn2(t){
       t++;//这样是不行的,因为这里t是局部变量,改变的是局部变量t的值,相当于 var t = test;  t++;
    }
    

    balas
    0
  • 習慣沉默

    習慣沉默2017-06-28 09:28:51

    Jenis asas JavaScript tidak mempunyai petunjuk dan tiada rujukan; Object berkata sebaliknya, jadi ini adalah satu-satunya helah.

    var global = {
      test1: 1,
      test2: 2
    }
    
    function fn () {
      changeByPointer('test1')
    }
    
    function fn2() {
      changeByPointer('test2')
    }
    
    function changeByPointer (pointer) {
      // do something
      global[pointer] ++
    }

    balas
    0
  • Batalbalas