Saya telah menginisialisasi beberapa variabel dalam lingkup global dalam file JavaScript:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Saya perlu mengatur semua variabel ini menjadi false, ini adalah kode yang saya miliki saat ini:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
Apakah ada cara saya dapat mengatur semua variabel ini ke nilai yang sama dalam satu baris kode, atau apakah kode saya saat ini memiliki cara terbaik untuk melakukan ini
javascript
SUB-HDR
sumber
sumber
Jawaban:
Tidak ada yang menghentikan Anda dari melakukan
Lihat contoh ini
sumber
function MyObj(){this.x=1} var a,b; a = b = new MyObj(); ++a.x
juga akan menambahb.x
properti.Tidak ada yang menghentikan Anda untuk melakukan hal di atas, tetapi tunggu sebentar!
Ada beberapa gotcha. Penugasan dalam Javascript adalah dari kanan ke kiri sehingga ketika Anda menulis:
secara efektif diterjemahkan menjadi:
yang secara efektif diterjemahkan menjadi:
Secara tidak sengaja, Anda baru saja membuat 5 variabel global - sesuatu yang saya cukup yakin tidak ingin Anda lakukan.
Catatan: Contoh saya di atas mengasumsikan Anda menjalankan kode Anda di browser, karenanya
window
. Jika Anda berada di lingkungan yang berbeda, variabel-variabel ini akan melekat pada apa pun konteks global terjadi untuk lingkungan itu (yaitu, di Node.js, itu akan melampirkanglobal
yang merupakan konteks global untuk lingkungan itu).Sekarang Anda bisa mendeklarasikan semua variabel Anda dan kemudian menetapkannya ke nilai yang sama dan Anda bisa menghindari masalah.
Singkatnya, kedua cara akan bekerja dengan baik, tetapi cara pertama berpotensi memperkenalkan beberapa bug yang merusak dalam kode Anda. Jangan melakukan dosa mengotori namespace global dengan variabel lokal jika tidak benar-benar diperlukan.
Sidenote: Seperti yang ditunjukkan dalam komentar (dan ini bukan hanya dalam kasus pertanyaan ini), jika nilai yang disalin bukanlah nilai primitif melainkan sebuah objek, Anda lebih baik tahu tentang menyalin berdasarkan nilai vs menyalin dengan referensi. Setiap kali menetapkan objek, referensi ke objek disalin bukan objek yang sebenarnya. Semua variabel masih akan menunjuk ke objek yang sama sehingga setiap perubahan dalam satu variabel akan tercermin dalam variabel lain dan akan menyebabkan Anda sakit kepala besar jika niat Anda adalah untuk menyalin nilai objek dan bukan referensi.
sumber
moveUp
menjadi tertutup, itu tidak ada bedanya. 5 variabel global masih akan dideklarasikan.var a, b, c; a = b = c = 10;
sangat berbeda darivar a = b = c = 10;
. Jadi, jawaban yang diterima benar. Anda sedang mengatasi masalah yang tidak terkait dengan jawaban yang diterima.Ada opsi lain yang tidak memperkenalkan gotcha global ketika mencoba untuk menginisialisasi beberapa variabel ke nilai yang sama. Apakah itu lebih disukai daripada jangka panjang adalah panggilan penilaian. Kemungkinan akan lebih lambat dan mungkin atau mungkin tidak lebih mudah dibaca. Dalam kasus spesifik Anda, saya pikir bahwa jalan panjang mungkin lebih mudah dibaca dan dikelola serta menjadi lebih cepat.
Cara lain menggunakan penugasan Destrukturisasi .
Hal ini memungkinkan Anda untuk menginisialisasi satu set
var
,let
atauconst
variabel dengan nilai yang sama pada satu baris semua dengan ruang lingkup yang diharapkan sama.Referensi:
MDN: Array Global Object
MDN: Array.fill
sumber
same
objek. Modifikasi yang satu akan memengaruhi yang lain ...Letakkan varible dalam array dan Gunakan a untuk Loop untuk menetapkan nilai yang sama ke beberapa variabel.
sumber