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.
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();
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] ++
}
Cara anda menulisnya di atas hanyalah untuk menjadikan
test
的值当成参数,传进去了fn2
里面而已,fn2
里面的参数t
仅仅只是和test
nilai sama.Jika anda ingin mengubah suai pembolehubah luaran di dalam fungsi, anda boleh menulis seperti ini.
Penyoal telah pun menjawab "Cara mengubah suai pembolehubah luaran"...
Parameter
t
当然不是指向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.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.
Jenis asas JavaScript tidak mempunyai petunjuk dan tiada rujukan; Object berkata sebaliknya, jadi ini adalah satu-satunya helah.