Quando eu estava escrevendo um programa à tarde, encontrei um problema de redefinição variável. Especificamente, a mesma variável foi definida em dois lugares em uma função e as duas variáveis foram colocadas em duas partes da instrução IF. Originalmente, pensei que as duas definições em diferentes blocos na declaração não deveriam ter efeito. No entanto, durante a operação, o IIS levou a variável a ser redefinição e a remoção da definição duplicada está correta.
Depois de resolver o problema, de repente pensei em ler um artigo no blog de Fdream "Variáveis JavaScript sem escopo no nível de bloco". Parece que esses dois são semelhantes. No VBScript, as variáveis também não têm escopo no nível do bloco.
Depois de ler esse artigo novamente, também fiz um experimento e obtive o resultado: no VBScript, o escopo da variável definido na função é toda a função, não o nível de bloco, não importa onde a variável seja definida na função. Portanto, uma variável em uma função pode ser usada em toda a função, não importa onde seja definida na função.
Aqui estão alguns exemplos para ilustrar esse problema.
A cópia do código é a seguinte:
OptionExplicit
Subfoo ()
Dimvar
var = "Olá, mundo!"
MsgBoxVar
Endsub
Callfoo ()
O código a seguir é equivalente ao código acima, mas a definição de var é colocada no final da função:
A cópia do código é a seguinte:
OptionExplicit
Subfoo ()
var = "Olá, mundo!"
MsgBoxVar
Dimvar
Endsub
Callfoo ()
O exemplo a seguir mostra que, não importa onde a variável seja definida, ela pode ser usada em toda a função. Obviamente, se a definição for colocada em uma posição especial, será benéfica para a clareza do código, é mais conveniente lê -la e modificar.
A cópia do código é a seguinte:
OptionExplicit
Subfoo ()
Dimvar1
var1 = "sim"
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Ifvar1 = "sim" então
Dimvar2
var2 = "não"
Endif
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Endsub
Callfoo ()
No desenvolvimento do ASP, a prática usual ao escrever uma função é definir a variável até que ela seja usada. Embora o escopo da variável não tenha nada a ver com a posição da definição, acho melhor escrevê -la antes que a variável seja usada. É mais conveniente modificar o código no futuro, para que você não precise recorrer ao cabeçalho da função para modificar a definição da variável após modificá -lo.