เมื่อฉันเขียนโปรแกรมในตอนบ่ายฉันพบปัญหาของการนิยามใหม่ของตัวแปร โดยเฉพาะตัวแปรเดียวกันถูกกำหนดในสองสถานที่ในฟังก์ชันและตัวแปรทั้งสองถูกวางไว้ในสองส่วนของคำสั่ง IF ตอนแรกฉันคิดว่าคำจำกัดความทั้งสองในบล็อกที่แตกต่างกันในคำสั่งไม่ควรมีผล อย่างไรก็ตามในระหว่างการดำเนินการ IIS แจ้งให้ตัวแปรเป็นนิยามใหม่และการลบคำจำกัดความที่ซ้ำกันนั้นถูกต้อง
หลังจากแก้ปัญหาฉันก็นึกถึงการอ่านบทความในบล็อกของ Fdream "ตัวแปร JavaScript ไม่มีขอบเขตระดับบล็อก" ดูเหมือนว่าทั้งสองจะคล้ายกัน ใน VBScript ตัวแปรยังไม่มีขอบเขตระดับบล็อก
หลังจากอ่านบทความนั้นอีกครั้งฉันได้ทำการทดลองและได้ผลลัพธ์: ใน VBScript ขอบเขตของตัวแปรที่กำหนดไว้ในฟังก์ชั่นคือฟังก์ชั่นทั้งหมดไม่ใช่ระดับบล็อกไม่ว่าตัวแปรจะถูกกำหนดไว้ที่ใด ดังนั้นตัวแปรในฟังก์ชั่นสามารถใช้ได้ตลอดฟังก์ชั่นไม่ว่าจะกำหนดไว้ที่ไหนในฟังก์ชั่น
นี่คือตัวอย่างบางส่วนเพื่อแสดงให้เห็นถึงปัญหานี้
การคัดลอกรหัสมีดังนี้:
ตัวเลือก Explicit
subfoo ()
dimvar
var = "สวัสดีโลก!"
msgboxvar
enddub
callfoo ()
รหัสต่อไปนี้เทียบเท่ากับรหัสด้านบน แต่คำจำกัดความของ VAR จะถูกวางไว้ที่ส่วนท้ายของฟังก์ชั่น:
การคัดลอกรหัสมีดังนี้:
ตัวเลือก Explicit
subfoo ()
var = "สวัสดีโลก!"
msgboxvar
dimvar
enddub
callfoo ()
ตัวอย่างต่อไปนี้แสดงให้เห็นว่าไม่ว่าตัวแปรจะถูกกำหนดไว้ที่ใดสามารถใช้ในฟังก์ชั่นทั้งหมดได้ แน่นอนหากคำจำกัดความถูกวางไว้ในตำแหน่งพิเศษมันจะเป็นประโยชน์ต่อความชัดเจนของรหัสมันจะสะดวกกว่าในการอ่านและแก้ไข
การคัดลอกรหัสมีดังนี้:
ตัวเลือก Explicit
subfoo ()
Dimvar1
var1 = "ใช่"
msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
ifvar1 = "ใช่" แล้ว
Dimvar2
var2 = "ไม่"
endif
msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
enddub
callfoo ()
ในการพัฒนา ASP การปฏิบัติตามปกติเมื่อเขียนฟังก์ชั่นคือการกำหนดตัวแปรจนกว่าจะใช้ แม้ว่าขอบเขตของตัวแปรไม่มีส่วนเกี่ยวข้องกับตำแหน่งของคำจำกัดความ แต่ฉันคิดว่ามันจะดีกว่าที่จะเขียนก่อนที่จะใช้ตัวแปร มันสะดวกกว่าในการปรับเปลี่ยนรหัสในอนาคตดังนั้นคุณไม่จำเป็นต้องหันไปใช้ส่วนหัวของฟังก์ชั่นเพื่อแก้ไขคำจำกัดความของตัวแปรหลังจากแก้ไข