Ketika saya sedang menulis program di sore hari, saya mengalami masalah redefinisi variabel. Secara khusus, variabel yang sama didefinisikan di dua tempat dalam suatu fungsi, dan dua variabel ditempatkan di dua bagian dari pernyataan IF. Saya awalnya berpikir bahwa dua definisi dalam blok yang berbeda dalam pernyataan itu seharusnya tidak berpengaruh. Namun, selama operasi, IIS mendorong variabel untuk menjadi redefinisi, dan menghilangkan definisi rangkap adalah benar.
Setelah menyelesaikan masalah, saya tiba-tiba berpikir untuk membaca sebuah artikel di blog FDream "JavaScript Variabel Tidak Ada Lingkup Level Blok". Tampaknya keduanya serupa. Dalam VBScript, variabel juga tidak memiliki ruang lingkup tingkat blok.
Setelah membaca artikel itu lagi, saya juga melakukan percobaan dan mendapatkan hasilnya: dalam VBScript, ruang lingkup variabel yang didefinisikan dalam fungsi adalah seluruh fungsi, bukan level blok, di mana pun variabel didefinisikan dalam fungsi. Oleh karena itu, variabel dalam suatu fungsi dapat digunakan di seluruh fungsi di mana pun ia didefinisikan dalam fungsi.
Berikut adalah beberapa contoh untuk menggambarkan masalah ini.
Salinan kode adalah sebagai berikut:
OptionExplicit
Subfoo ()
Dimvar
var = "Halo, dunia!"
Msgboxvar
Endsub
Callfoo ()
Kode berikut setara dengan kode di atas, tetapi definisi VAR ditempatkan di akhir fungsi:
Salinan kode adalah sebagai berikut:
OptionExplicit
Subfoo ()
var = "Halo, dunia!"
Msgboxvar
Dimvar
Endsub
Callfoo ()
Contoh berikut menunjukkan bahwa di mana pun variabel didefinisikan, dapat digunakan di seluruh fungsi. Tentu saja, jika definisi ditempatkan dalam posisi khusus, itu akan bermanfaat bagi kejelasan kode, lebih nyaman untuk membaca dan memodifikasinya.
Salinan kode adalah sebagai berikut:
OptionExplicit
Subfoo ()
Dimvar1
var1 = "ya"
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Ifvar1 = "ya" lalu
Dimvar2
var2 = "tidak"
Endif
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Endsub
Callfoo ()
Dalam pengembangan ASP, praktik biasa saat menulis fungsi adalah untuk menentukan variabel sampai digunakan. Meskipun ruang lingkup variabel tidak ada hubungannya dengan posisi definisi, saya pikir lebih baik menulisnya sebelum variabel digunakan. Lebih nyaman untuk memodifikasi kode di masa mendatang, jadi Anda tidak perlu beralih ke header fungsi untuk memodifikasi definisi variabel setelah memodifikasinya.