Rumah > Soal Jawab > teks badan
Jenis primitif (nombor, rentetan, dsb.) diluluskan mengikut nilai, tetapi objek tidak diketahui kerana semuanya boleh diluluskan mengikut nilai (dalam kes ini, kami berpendapat bahawa pembolehubah yang memegang objek sebenarnya merujuk kepada objek ) dan lulus dengan rujukan (apabila kita memikirkan pembolehubah objek sebagai memegang objek itu sendiri).
Walaupun tidak penting pada akhirnya, saya ingin tahu apakah cara yang betul untuk membentangkan konvensyen lulus parameter. Adakah terdapat petikan daripada spesifikasi JavaScript yang mentakrifkan semantik yang berkaitan dengan ini?
P粉1954022922023-10-12 10:04:53
JavaScript memang menyeronokkan. Pertimbangkan contoh ini:
function changeStuff(a, b, c) { a = a * 10; b.item = "changed"; c = {item: "changed"}; } var num = 10; var obj1 = {item: "unchanged"}; var obj2 = {item: "unchanged"}; changeStuff(num, obj1, obj2); console.log(num); console.log(obj1.item); console.log(obj2.item);
Ini menghasilkan output:
10 changed unchanged
obj1
根本不是引用,则更改 obj1.item
不会对函数外部的 obj1
mempunyai sebarang kesan. num
将是 100
,而 obj2.item
将读取“changed”
。相反,num
保持 10
且 obj2.item
保持“不变
”.Sebaliknya, apa yang berlaku ialah item yang diluluskan dilalui oleh nilai. Tetapi item yang diluluskan oleh nilai itu sendiri adalah rujukan. Secara teknikal, ini dipanggil panggilan kongsi.
Dalam amalan, ini bermakna jika anda menukar parameter itu sendiri (seperti num
和 obj2
),则不会影响输入到范围。但是,如果您更改参数的内部,它将向上传播(与 obj1
lakukan).