La portée des variables dans les fonctions VBScript
J'ai une question sur la portée des variables en VBScript. Je sais qu'il ya les mots-clés suivants (à partir de autoitscript.com):
- Dim = portée Locale si le nom de la variable n'existe pas encore à l'échelle mondiale (dans ce cas, il réutilise la variable globale!)
- Global = Forces de la création de la variable dans la portée Globale
- Local = Forces de la création de la variable dans le Local/portée de la Fonction
Imaginer que j'ai la suite .fichier vbs:
Dim strPath
strPath = "C:\folder"
DisplayPath strPath
Sub DisplayPath(strPath) 'Does this strPath get it's own local scope?
MsgBox strPath
End Sub
Dans la fonction: DisplayPath(strPath)
, est strPath
un local variable? Ou dois-fonctions/sous-marins ont accès à la strPath
définies dans la partie supérieure de la section principale du script en tant que mondiale variable?
Aussi, ce qui est le point de manière explicite à l'aide Dim
par rapport à la seule définition des variables comme je le les utiliser, ce qui est possible dans les langages de script?
OriginalL'auteur JohnB | 2010-09-30
Vous devez vous connecter pour publier un commentaire.
La
strPath
dans leDisplayPath
procédure sera une nouvelle variable, mais pas pour les raisons que vous attendez, il y a de subtiles problème avec votre code de nuage de la question.Lors de l'appel de
Sub
procédure de la syntaxe VBScript ne comprend pas les parenthèses. Par exemple:-ci-dessus entraînerait une erreur de syntaxe. Il doit être appelé:-
Maintenant, quand il n'y a qu'un seul paramètre, une erreur de syntaxe ne se produit pas. C'est parce qu'une autre utilisation des parenthèses est comme une partie d'une expression par exemple '(a + b) * c'. Dans le cas de:-
VBScript résout le "expression"
(strPath)
et passer le résultat àDisplayPath
. Sa cette résultat qui donne lieu à de nouvelles stockage contenir le résultat de l'expression.Vous avait appelé avec
pas de nouveau créé.
Toutefois qu'à ce sujet:-
Il n'y a toujours pas de nouvelle de stockage alloué.
something
se pointer à la même mémoire questrPath
.Modifier
Le code ci-dessous fonctionne:-
La déclaration de
strPath
en dehors d'une procédure en fait de portée mondiale.Comme pour le point de l'utilisation explicite
Dim
qu'arriverait-il si l'affectation de la ligne ci-dessus ressemblait à ça?Une nouvelle variable appelée
strPath
serait venu à l'existence etstrPath
resterait vide. Vous devriez toujours commencer vos fichiers VBScript avec la ligne:-Cela va vous forcer explicitement
Dim
toutes les variables à utiliser et vous permettra d'économiser des heures de temps de débogage.strPath
est globale et accessible à toutes les fonctions/sous-marins dans le script, même si je ne passe pas en tant que local de la fonction de variables.Voir mon édité réponse.
Je vois votre point de vue avec la faute de frappe, merci!
Observation très importante, m'a sauvé quelques fois aujourd'hui!!
La syntaxe est Simple des erreurs relatives entre parenthèses, j'ai facilement résolu en utilisant
Call MyProc("Hello", "World")
.OriginalL'auteur AnthonyWJones