VBScript中for循环的迭代变量i值为何会被意外修改?
问题原因
VBScript 默认所有未显式声明作用域的变量都是脚本级全局变量,全脚本所有位置的读写操作都会修改同一个变量值:
- 你没有用
Dim声明过变量i,外层输入数组的for循环用的是全局i - 你定义的
prime函数内部直接对i赋值、自增,修改的也是同一个全局i,所以每次调用prime函数后,全局的i值都会被覆盖,你在第二个for循环里打印的i自然每次都会变动。
修复方案
- 方案1:给
prime函数内部的循环变量添加局部声明,避免修改全局变量,修改后的prime函数如下:
Function prime(n) Dim flag, i ' 声明函数内部的局部变量 flag = 1 i = 2 do while i < n if n mod i = 0 Then flag = 0 exit do end if i = i + 1 loop prime = CBool(flag) end Function
- 方案2:在脚本最开头添加
Option Explicit语句,强制要求所有变量必须先声明才能使用,运行时如果出现未声明的变量会直接抛出错误,从根源上避免这类变量作用域混淆问题。 - 方案3:不同层级的循环尽量使用不同的变量名,降低重名冲突的概率。
内容的提问来源于stack exchange,提问作者thangvc91
相关产品推荐
相关产品推荐

