Tidak seperti bahasa pemrograman seperti C dan Java, variabel dalam JavaScript tidak ada tipe, dan semua definisi variabel menggunakan kata kunci var:
Salinan kode adalah sebagai berikut:
var a;
var m, n;
var x = 42, y = "test";
Jika variabel tidak diberi nilai setelah mendefinisikannya, nilai variabel tidak ditentukan. Misalnya, nilai -nilai dari tiga variabel A, M dan N dalam kode di atas tidak terdefinisi.
Karena variabel dalam JS tidak ada tipe, dimungkinkan untuk menetapkan berbagai jenis nilai ke variabel yang sama, seperti:
Salinan kode adalah sebagai berikut:
var b = "temp";
console.log (typeof b); // string
B = 108;
console.log (typeof b); // nomor
Selain berbagai jenis penugasan ke variabel yang sama, variabel juga dapat berulang kali didefinisikan dalam JavaScript; Jika ini dilakukan, pernyataan definisi variabel setelah pertama kali setara dengan pernyataan penugasan:
Salinan kode adalah sebagai berikut:
var c = "halo";
console.log (c); // halo
var c = true;
console.log (c); // true
Di bawah mode ketat dari standar ecmascript, semua definisi variabel memerlukan penggunaan kata kunci VAR. Jika mode ketat tidak digunakan, ketika program JS memberikan nilai ke variabel yang tidak ditentukan, program akan membuat properti di objek global JS dengan nama yang sama dengan variabel, yaitu, buat variabel global baru. Pendekatan ini akan membawa banyak masalah (seperti polusi variabel global antara beberapa program JS, dll.), Yang akan menyebabkan masalah besar pada pemeliharaan selanjutnya; Oleh karena itu, dalam proses pengembangan yang sebenarnya, pendekatan ini harus dihindari sebanyak mungkin.
Penyimpanan variabel
Jika variabel yang ditentukan adalah variabel global dan kata kunci VAR tidak digunakan selama proses definisi variabel, maka variabel akan ada sebagai properti dari objek global. Ini dapat diperoleh dengan mengakses properti yang sesuai dari ini (objek global), atau dapat dihapus dari objek global dengan menggunakan kata kunci hapus:
Salinan kode adalah sebagai berikut:
var e = "GlobalVariableValue"; // didefinisikan di luar fungsi apa pun, itu adalah variabel global, tetapi tidak menyimpan dalam "ini"
f = "GlobalVariableValue2";
this.g = "GlobalVariableValue3";
console.log (this.e); // tidak ditentukan
console.log (this.f); // globalvariablevalue2
console.log (this.g); // globalvariablevalue3
hapus f;
hapus g;
console.log (this.f); // tidak ditentukan
console.log (this.g); // tidak ditentukan
Untuk setiap panggilan fungsi dalam JavaScript, JavaScript akan membuat objek lokal untuk menyimpan variabel lokal yang ditentukan dalam fungsi; Jika ada fungsi bersarang di dalam fungsi, JavaScript akan mendefinisikan objek lokal bersarang di dalam objek lokal yang sudah ditentukan. Untuk suatu fungsi, ada banyak lapisan definisi fungsi bersarang seperti yang ada, sebanyak lapisan objek lokal bersarang seperti yang ada. Objek lokal ini disebut "Objek Panggilan Fungsi" ("Call Object" dalam ECMASCRIPT 3, dan diganti namanya menjadi "Catatan Lingkungan Deklaratif" dalam ECMASCRIPT 5, tetapi saya pribadi berpikir bahwa nama dalam ECMASCRIPS 3 lebih mudah dipahami).
Berbeda dengan objek global ini, JavaScript tidak menyediakan cara apa pun untuk mengakses objek lokal ini (objek panggilan fungsi). Oleh karena itu, pengembang tidak dapat beroperasi pada benda -benda lokal ini. Namun, memahami objek panggilan fungsi ini akan sangat membantu untuk memahami beberapa konsep dalam JavaScript, seperti ruang lingkup dan penutupan variabel.