Lorsque j'écrivais un programme dans l'après-midi, j'ai rencontré un problème de redéfinition variable. Plus précisément, la même variable a été définie à deux endroits d'une fonction, et les deux variables ont été placées en deux parties de l'instruction IF. Je pensais à l'origine que les deux définitions dans différents blocs de l'instruction ne devraient avoir aucun effet. Cependant, pendant le fonctionnement, IIS a incité la variable à être redéfini et la suppression de la définition en double est correcte.
Après avoir résolu le problème, j'ai soudainement pensé à lire un article dans le blog de FDREAM "JavaScript Variables No Block-Auvel Scope". Il semble que ces deux-là soient similaires. Dans VBScript, les variables n'ont pas non plus de portée au niveau du bloc.
Après avoir à nouveau lu cet article, j'ai également fait une expérience et obtenu le résultat: dans VBScript, la portée de la variable définie dans la fonction est la fonction entière, pas le niveau de bloc, peu importe où la variable est définie dans la fonction. Par conséquent, une variable dans une fonction peut être utilisée dans toute la fonction, peu importe où elle est définie dans la fonction.
Voici quelques exemples pour illustrer ce problème.
La copie de code est la suivante:
Option Explicit
Subfoo ()
Dimvar
var = "Bonjour, monde!"
Msgboxvar
Fin
Callfoo ()
Le code suivant est équivalent au code ci-dessus, mais la définition de VAR est placée à la fin de la fonction:
La copie de code est la suivante:
Option Explicit
Subfoo ()
var = "Bonjour, monde!"
Msgboxvar
Dimvar
Fin
Callfoo ()
L'exemple suivant montre que peu importe où la variable est définie, elle peut être utilisée dans toute la fonction. Bien sûr, si la définition est placée dans une position spéciale, elle sera bénéfique pour la clarté du code, il est plus pratique de le lire et de le modifier.
La copie de code est la suivante:
Option Explicit
Subfoo ()
Dimvar1
var1 = "oui"
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Ifvar1 = "oui" puis
Dimvar2
var2 = "non"
Endire
Msgbox "var1:" & var1 & vbcrlf & "var2:" & var2
Fin
Callfoo ()
Dans le développement ASP, la pratique habituelle lors de l'écriture d'une fonction est de définir la variable jusqu'à ce qu'elle soit utilisée. Bien que la portée de la variable n'ait rien à voir avec la position de la définition, je pense qu'il est préférable de l'écrire avant que la variable ne soit utilisée. Il est plus pratique de modifier le code à l'avenir, vous n'avez donc pas à vous tourner vers l'en-tête de fonction pour modifier la définition de la variable après l'avoir modifiée.