Semantik dari var
danlet
var
dan let
merupakan pernyataan untuk mesin dan untuk programmer lain:
Saya bermaksud bahwa nilai tugas ini berubah selama pelaksanaan. Jangan mengandalkan nilai tugas ini pada akhirnya.
Implikasi penggunaan var
danlet
var
dan let
memaksa pemrogram lain untuk membaca semua kode intervensi mulai dari deklarasi hingga penggunaan akhirnya, dan alasan tentang nilai penugasan pada saat itu dalam pelaksanaan program.
Mereka melemahkan alasan mesin untuk ESLint dan layanan bahasa lainnya untuk mendeteksi dengan benar nama variabel yang salah ketik dalam penugasan dan penggunaan kembali lingkup berikutnya dari nama variabel lingkup luar di mana lingkup dalam lupa untuk menyatakan.
Mereka juga menyebabkan runtimes untuk menjalankan banyak iterasi pada semua codepath untuk mendeteksi bahwa mereka sebenarnya, pada kenyataannya, adalah konstanta, sebelum mereka dapat mengoptimalkannya. Meskipun ini kurang dari masalah deteksi bug dan kelengkapan pengembang.
Kapan harus digunakan const
Jika nilai referensi tidak berubah selama eksekusi, sintaks yang benar untuk mengekspresikan maksud programmer adalah const
. Untuk objek, mengubah nilai referensi berarti menunjuk ke objek lain, karena referensi tidak dapat diubah, tetapi objek tidak.
" const
" objek
Untuk referensi objek, pointer tidak dapat diubah ke objek lain, tetapi objek yang dibuat dan ditetapkan ke const
deklarasi adalah bisa berubah. Anda dapat menambah atau menghapus item dari const
array yang direferensikan, dan mengubah kunci properti pada const
objek yang direferensikan.
Untuk mencapai objek yang tidak dapat diubah (yang sekali lagi, membuat kode Anda lebih mudah dipikirkan untuk manusia dan mesin), Anda dapat Object.freeze
objek di deklarasi / penugasan / pembuatan, seperti ini:
const Options = Object.freeze(['YES', 'NO'])
Object.freeze memang berdampak pada kinerja, tetapi kode Anda mungkin lambat karena alasan lain. Anda ingin profil itu.
Anda juga dapat merangkum objek yang dapat diubah dalam mesin keadaan dan mengembalikan salinan yang dalam sebagai nilai (ini adalah bagaimana Redux dan React state bekerja). Lihat Menghindari keadaan global yang bisa berubah di Browser JS untuk contoh bagaimana membangun ini dari prinsip pertama.
Kapan var
dan let
merupakan pasangan yang baik
let
dan var
mewakili negara yang bisa berubah. Mereka seharusnya, menurut pendapat saya, hanya digunakan untuk memodelkan keadaan sebenarnya yang bisa berubah . Hal-hal seperti " apakah koneksinya hidup? ".
Ini adalah enkapsulasi terbaik dalam mesin negara yang dapat diuji yang mengekspos nilai konstan yang mewakili " keadaan koneksi saat ini ", yang merupakan konstanta pada setiap titik waktu, dan apa yang sebenarnya menarik dari kode Anda.
Pemrograman sudah cukup sulit dengan menyusun efek samping dan mengubah data. Mengubah setiap fungsi menjadi mesin keadaan yang tidak dapat diuji dengan membuat keadaan yang bisa berubah dengan variabel yang hanya menumpuk pada kompleksitas.
Untuk penjelasan yang lebih bernuansa, lihat Shun the Mutant - Case forconst
.