Когда я писал программу во второй половине дня, я столкнулся с проблемой переопределения переменных. В частности, одна и та же переменная была определена в двух местах в функции, и две переменные были размещены в двух частях оператора IF. Первоначально я думал, что два определения в разных блоках в утверждении не должны иметь никакого эффекта. Однако во время работы IIS побудил переосмысление переменной, и удаление дубликата определения является правильным.
После решения проблемы я вдруг подумал прочитать статью в блоге Fdream «Переменные JavaScript без применения на уровне блоков». Кажется, что эти два похожи. В VBScript переменные также не имеют прицела на уровне блока.
После прочтения этой статьи я также провел эксперимент и получил результат: в VBScript объем переменной, определенной в функции, является всей функцией, а не уровнем блока, независимо от того, где переменная определена в функции. Следовательно, переменная в функции может использоваться по всей функции, где бы она ни была определена в функции.
Вот несколько примеров, чтобы проиллюстрировать эту проблему.
Кода -копия выглядит следующим образом:
OptionExplice
Subfoo ()
Димвар
var = "Привет, мир!"
MSGBOXVAR
Заканчивая
Callfoo ()
Следующий код эквивалентен вышеуказанному коду, но определение VAR размещено в конце функции:
Кода -копия выглядит следующим образом:
OptionExplice
Subfoo ()
var = "Привет, мир!"
MSGBOXVAR
Димвар
Заканчивая
Callfoo ()
В следующем примере показано, что независимо от того, где определяется переменная, ее можно использовать во всей функции. Конечно, если определение помещено в особую позицию, оно будет полезно для ясности кода, его более удобно читать и изменить его.
Кода -копия выглядит следующим образом:
OptionExplice
Subfoo ()
Dimvar1
var1 = "Да"
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Ifvar1 = "Да" тогда
Dimvar2
var2 = "Нет"
Эндиф
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Заканчивая
Callfoo ()
В разработке ASP обычная практика при написании функции состоит в том, чтобы определить переменную до тех пор, пока она не будет использована. Хотя объем переменной не имеет ничего общего с позицией определения, я думаю, что лучше написать ее до использования переменной. Это удобнее изменить код в будущем, поэтому вам не нужно обращаться к заголовку функции, чтобы изменить определение переменной после его изменения.