Rumah  >  Soal Jawab  >  teks badan

Adakah parameter diluluskan dalam JavaScript mengikut nilai atau rujukan?

<p>Jenis primitif (nombor, rentetan, dsb.) diluluskan mengikut nilai, tetapi objek tidak diketahui kerana kedua-duanya boleh diluluskan oleh nilai (dalam kes ini kita fikir pembolehubah yang memegang objek sebenarnya adalah rujukan objek), boleh juga diluluskan dengan rujukan (dalam hal ini kita menganggap pembolehubah untuk memegang objek itu sendiri). </p> <p>Walaupun ia akhirnya tidak penting, saya ingin mengetahui cara untuk memaparkan konvensyen lulus parameter dengan betul. Adakah terdapat petikan daripada spesifikasi JavaScript yang mentakrifkan semantik tentang perkara ini? </p>
P粉394812277P粉394812277400 hari yang lalu517

membalas semua(1)saya akan balas

  • P粉426906369

    P粉4269063692023-08-22 13:30:26

    Memang menyeronokkan dalam JavaScript. Pertimbangkan contoh berikut:

    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 akan menghasilkan output berikut:

    10
    changed
    unchanged
    
    • Jikaobj1根本不是引用,那么改变obj1.item对函数外部的obj1tiada impak.
    • Jika hujah adalah rujukan yang betul, semuanya berubah. num将为100obj2.item将为"changed"。相反,num保持为10obj2.item仍然为"unchanged".

    Sebenarnya, apa yang berlaku ialah item yang lulus lulus nilai. Tetapi item yang diluluskan oleh nilai itu sendiri adalah rujukan. Secara teknikal, ini dipanggil panggilan kongsi.

    Dalam aplikasi praktikal, ini bermakna jika anda menukar parameter itu sendiri (seperti numobj2),那不会影响传入参数的项。但是,如果更改参数的内部,那将会传播回来(如obj1).

    balas
    0
  • Batalbalas