javascript - Bagaimana untuk mengubah suai pembolehubah luaran di dalam fungsi
给我你的怀抱
给我你的怀抱 2017-06-28 09:26:51
0
7
1034

Seperti yang dinyatakan, kodnya adalah seperti berikut:

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

Selesaikan keraguan anda

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

membalas semua(7)
学霸

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);
洪涛

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.

阿神

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

扔个三星炸死你

Cuma tukar terus, tak perlu pass nilai

滿天的星座

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

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] ++
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!