Область переменных в функциях VBScript

у меня вопрос о переменной области в VBScript. Я знаю, что есть следующие слова (из autoitscript.com):

  1. Dim = локальная область, если имя переменной еще не существует глобально (в этом случае она повторно использует глобальную переменную!)
  2. Global = заставляет создавать переменную в глобальной области
  3. Local = заставляет создавать переменную в области Local/Function

представьте, что я имеем следующее .файл vbs:

Dim strPath

strPath = "C:folder"

DisplayPath strPath

Sub DisplayPath(strPath) 'Does this strPath get it's own local scope?
  MsgBox strPath
End Sub

функции: DisplayPath(strPath), is strPath a местные переменной? Или у функций / subs есть доступ к strPath определяется в верхней части основного раздела скрипта как глобальные переменной?

кроме того, какой смысл явно использовать Dim против просто определения переменных, как я их использую, что возможно в языках сценариев?

1 ответов


на strPath на DisplayPath процедура будет новой переменной, но не по причинам, которые вы ожидаете, есть тонкая проблема с вашим кодом, который затуманит проблему.

при вызове Sub процедура синтаксис VBScript не содержит скобок. Например:-

Sub MyProc(Param1, Param2)
  '' # Do stuff
End Sub

MyProc("Hello", "World")

вышеизложенное приведет к синтаксической ошибке. Она должна называться: -

MyProc "Hello", "World"

теперь, когда есть только один параметр, синтаксическая ошибка не возникает. Это потому что другое использование круглых скобок является частью выражения, например '(a + b) * c'. В случае:-

DisplayPath(strPath)

VBScript разрешает "выражение"(strPath) и передать результат до DisplayPath. Его это результат это приводит к новому хранению, удерживающему результат выражения.

вы звонили с

DisplayPath strPath

нет новых.

однако как насчет этого: -

Sub DisplayPath(something)
  MsgBox something
End Sub

еще новое хранилище не выделено. something будет указывать на ту же память, что strPath делает.

редактировать

код ниже работает: -

Dim strPath

strPath = "c:\folder"

Display


Sub Display()
  MsgBox strPath
End Sub

декларация strPath вне процедуры заставляет его иметь глобальный охват.

Что касается использования явного Dim что произойдет, если строка назначения выше будет выглядеть так?

 strPath = "c:\folder"

новую переменную strPath вступает в существование и strPath останутся пустыми. Вы должны всегда начните файлы VBScript со строки: -

Option Explicit

это заставит вас явно Dim все переменные, котор нужно использовать и сохранят вас часы времени отладки.