Saya sedang berusaha pada asas saya sedikit dan terjumpa masalah ini, yang saya tahu secara intuitif, tetapi tidak pernah pergi secara terperinci untuk diterokai. Dan tiada alasan untuk saya tidak mempunyai pemahaman yang lebih mendalam tentang cara JavaScript menangani primitif.
Ini adalah contoh paling mudah. Di sini, myPointsvariable tidak akan dikemas kini walaupun saya memanggil fungsi add3 dan remove1.
let myPoints = 3; function add3(points) { points += 3; } function remove1(points) { points--; } add3(myPoints); remove1(myPoints); console.log(myPoints) // 3
Berikut ialah konsep teras yang menjadikan ini berfungsi seperti biasa:
Lulus mengikut nilai:
Dalam JavaScript, apabila anda menghantar nilai primitif (seperti nombor) kepada fungsi, ia dihantar mengikut nilai. Ini bermakna salinan nilai dicipta dan dihantar kepada fungsi, bukan pembolehubah asal itu sendiri.
Skop fungsi:
Pembolehubah yang ditakrifkan di dalam fungsi mempunyai skop fungsi, bermakna ia hanya boleh diakses dalam fungsi tersebut.
Kembalikan nilai:
Fungsi dalam JavaScript perlu mengembalikan nilai secara eksplisit jika anda ingin menggunakan hasil di luar fungsi.
Inilah sebab myPoints tidak berubah:
Untuk membetulkannya, saya mempunyai dua pilihan utama:
function add3(points) { return points + 3; } myPoints = add3(myPoints);
let myPoints = { value: 3 }; function add3(pointsObj) { pointsObj.value += 3; } add3(myPoints); console.log(myPoints.value); // Now it's 6
Atas ialah kandungan terperinci Primitif, Fungsi dan WTH Nilai tidak akan dikemas kini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!