Dibandingkan dengan C/C ++, loop untuk ecmascript tidak dapat membuat konteks lokal.
Salinan kode adalah sebagai berikut:
untuk (var k in {a: 1, b: 2}) {
peringatan (k);
}
peringatan (k); // Meskipun loop telah berakhir, variabel k masih dalam lingkup saat ini
Kapan saja, variabel hanya dapat dinyatakan dengan menggunakan kata kunci VAR.
Pernyataan penugasan di atas:
a = 10;
Ini hanya membuat properti baru untuk objek global (tetapi bukan variabel). "Bukan variabel" tidak berarti bahwa itu tidak dapat diubah, tetapi berarti bahwa itu tidak sesuai dengan konsep variabel dalam spesifikasi ecmascript, jadi itu "bukan variabel" (alasan mengapa itu dapat menjadi properti dari objek global sepenuhnya karena ada objek global dalam javascript. Operasi seperti itu bukan untuk menyatakan variabel tetapi untuk menambahkan properti ke objek global.
Mari kita lihat contoh sederhana untuk menggambarkan masalahnya
Salinan kode adalah sebagai berikut:
if (! ("a" di jendela)) {
var a = 1;
}
waspada (a);
Pertama -tama, semua variabel global adalah sifat jendela, dan pernyataan var a = 1; setara dengan window.a = 1;
Anda dapat menggunakan metode berikut untuk mendeteksi apakah variabel global dinyatakan
"Nama variabel" di jendela
Kedua, semua deklarasi variabel berada di bagian atas lingkup lingkup, lihat contoh yang sama:
Salinan kode adalah sebagai berikut:
peringatan ("A" di jendela);
var a;
Pada saat ini, meskipun deklarasi setelah peringatan, peringatan muncul masih benar, karena mesin JavaScript pertama -tama akan menyapu semua deklarasi variabel, dan kemudian memindahkan deklarasi variabel ini ke atas. Efek kode akhir adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var a;
peringatan ("A" di jendela);
Ketiga, Anda perlu memahami makna pertanyaannya adalah bahwa deklarasi variabel sudah maju, tetapi penugasan variabel tidak, karena baris kode ini mencakup deklarasi variabel dan penugasan variabel.
Anda dapat membagi pernyataan menjadi kode berikut:
Salinan kode adalah sebagai berikut:
var a; // Penyataan
a = 1; // Inisialisasi tugas
Jadi untuk meringkas, ketika deklarasi dan penugasan variabel digunakan bersama, mesin JavaScript akan secara otomatis membaginya menjadi dua bagian untuk memajukan deklarasi variabel. Langkah penugasan tidak maju karena dapat mempengaruhi eksekusi kode dan mencapai hasil yang tidak terduga.
Kode dalam pertanyaan setara dengan:
Salinan kode adalah sebagai berikut:
var a;
if (! ("a" di jendela)) {
a = 1;
}
waspada (a);
Menurut analisis contoh di atas, jika variabel dinyatakan, Anda harus menambahkan VAR sebelum variabel lokal yang dinyatakan. Jika variabel global yang dinyatakan, Anda tidak dapat menambahkan VAR (yang terbaik adalah membatasi jumlah variabel global dan mencoba menggunakan variabel lokal)
Berikut ini menjelaskan beberapa fitur menggunakan var
Menggunakan pernyataan VAR untuk mendeklarasikan variabel beberapa kali tidak hanya legal, tetapi juga tidak menyebabkan kesalahan.
Jika deklarasi yang digunakan kembali memiliki nilai awal, itu hanya berfungsi sebagai pernyataan penugasan.
Jika deklarasi yang digunakan kembali tidak memiliki nilai awal, itu tidak akan memiliki efek pada variabel asli.
Variabel tanpa deklarasi var ada sebagai variabel global; Variabel dengan deklarasi var milik variabel lokal, terutama fungsi di dalam. Dan, setelah pengujian, lebih cepat untuk menyatakan dengan VAR daripada tidak dengan VAR. Tetapkan sebanyak mungkin variabel lokal dalam fungsi, yang aman dan cepat, dan operasi variabel lebih masuk akal, dan tidak akan ada kesalahan logis yang disebabkan oleh operasi acak variabel global dalam fungsi.
Yang terbaik adalah menggunakan metode tatap muka objek sendiri ketika mendeklarasikan objek, karena kecepatan ini jauh lebih cepat daripada metode baru.
Nama variabel diambil sendiri. Untuk mengurus semantik dan spesifikasi, nama variabel mungkin sedikit lebih lama, tetapi hati -hati, panjang nama variabel juga akan mempengaruhi kecepatan eksekusi kode. Deklarasi nama variabel panjang tidak secepat pendek.