• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201410期】按键精灵之变量的作用域 [复制链接]

1#

按键精灵之变量的作用域


作者:qq250039815
童鞋们都知道,在按键里声明变量是十分自由的,爱声明就声明,不爱声明咱就不声明。那么问题来了~按键中有Dim、DimEnv、Global,这3个定义变量的命令,定义的变量的作用域究竟哪个最大?Dim?DimEnv?还是Global呢?



知识点提要

1 Dim定义的变量仅在主线程有效,不支持多线程、QUI事件内、其他脚本内值的传递。
2 DimEnv:定义的变量可在主线程有效,且支持多线程、QUI事件内、其他脚本内值的传递。
3 Global:
定义的变量可在主线程有效,半支持多线程(支持单独的线程,不支持线程中线程),不支持QUI事件内、其他脚本内值的传递。



Dim


Dim 语句
描述声明变量并分配存储空间
参数1、变量名
2、数组变量的维数:最多可以声明 60 维的数组, 数组下界总是 0。
返回值



定义一个变量,支持数组。可以在主线程和子程序中定义分别定义。在主线程中定义为全局变量,若不定义默认为全局变量。在子程序内定义为局部变量,若不定义默认为全局变量。


主线程中定义

1、例子
  1. Dim x
  2. x = 123
  3. MessageBox x
复制代码

您所在的用户组无法下载或查看附件



2、不写DiM也是可以的,例如:
  1. x = 123
  2. MessageBox x
复制代码

您所在的用户组无法下载或查看附件

以上2个脚本代码调试效果一致,因为当不Dim时,脚本默认为全局变量(但作用域仅为主脚本线程,不支持多线程,QUI事件内及其他脚本的传递。)

在子程序中定义

1、不带Dim,例如:
  1. x = 123
  2. MessageBox x
  3. Call 测试
  4. MessageBox x
  5. Sub 测试
  6. x = 456
  7. MessageBox x
  8. End Sub
复制代码
调试以上脚本,会弹出3次x的值,第一次为“123”,第二次为“456”,第三次为“456”。
分析代码:脚本开头我们定义了x=123,无Dim,默认为全局变量,弹出“123”,调用子程序 测试,子程序内部定义x=456,没Dim故默认为全局变量,所以将x的值从“123”替换为“456”,弹出“456”,最后在子程序外弹出x,结果依旧为“456”,因为x已被替换。

2、带Dim,例如:
  1. x = 123
  2. MessageBox x
  3. Call 测试
  4. MessageBox x
  5. Sub 测试
  6. Dim x
  7. x = 456
  8. MessageBox x
  9. End Sub
复制代码
调试以上脚本,会弹出3次x的值,第一次为“123”,第二次为“456”,第三次为“123”。
分析代码:脚本开头我们定义了x=123,无变量声明默认为全局变量,弹出“123”。调用子程序测试,子程序内部定义x=456,且Dim声明变量x,弹出“456”,最后在子程序外弹出x,结果依旧为“123”。因为虽在子程序内部重新定义了x的值,但它是dim x,所以为局部变量,即子程序内部的x是独立的,虽然变量名与子程序外部的x同名,但没有任何关系。故不影响子程序外x的值,结果依然是“123”。


DimEnv

命令名称DimEnv 定义环境变量
命令功能定义环境变量
命令参数变量名
备注:
1、在子程序里定义变量不可以为环境变量
2、不支持数组定义为环境变量

返 回 值

定义一个环境变量,不支持数组。仅可在主线程中定义。定义的变量可在主线程有效,且支持多线程、QUI事件内、其他脚本内值的传递。


Qui事件内传例子

1、例子
  1. Dimenv x
  2. x = 123
  3. Event Form1.Button1.Click
  4. MessageBox x
  5. End Event
复制代码

您所在的用户组无法下载或查看附件

启动以上脚本,然后打开QUI界面,点击按钮,弹出“123”。
分析代码:定义环境变量 x,建立一个QUI-按钮控件,并利用按钮点击事件弹出x的值,即“123”。
注意:拥有环境变量的脚本,务必启动脚本或调试一次脚本,再使用QUI事件,否则x的值,还是无法传递进QUI事件内。


2、下面的例子则无法传递x的值
  1. x = 123
  2. Event Form1.Button1.Click
  3. MessageBox x
  4. End Event
复制代码

您所在的用户组无法下载或查看附件

启动以上脚本,然后打开QUI界面,点击按钮,弹出“”,即空,无值。
分析代码:没有定义环境变量 x,所以x的值,无法传递进QUI事件内。

多线程内传递例子

1、例子
  1. DimEnv x
  2. x = 123
  3. BeginThread 测试
  4. Sub 测试
  5. MessageBox x
  6. End Sub
复制代码

您所在的用户组无法下载或查看附件

启动以上脚本,调用线程 测试,弹出“123”。
分析代码:由于定义了环境变量 x,所以x的值成功传递进了,线程 测试中,故弹出“123”。
 

2、下面的例子则不能弹出x的值
  1. x = 123
  2. BeginThread 测试
  3. Sub 测试
  4. MessageBox x
  5. End Sub
复制代码

您所在的用户组无法下载或查看附件

启动以上脚本,弹出“”,即空,无值。
分析代码:没有定义环境变量 x,所以x的值,无法传递进多线程内。



Global

命令名称Global 定义全局变量
命令功能定义全局变量
命令参数变量名
备注:
1、在子程序里定义变量不可以为全局变量
2、不支持数组定义为全局变量
返 回 值

定义一个全局变量,不支持数组。仅可在主线程中定义。定义的变量可在主线程有效,且支持多线程,不支持QUI事件内、其他脚本内值的传递。


线程内定义全局变量

1、例子
  1. Global x
  2. x = 123
  3. BeginThread 测试
  4. Sub 测试
  5. MessageBox x
  6. End Sub
复制代码

您所在的用户组无法下载或查看附件

 
启动以上脚本,调用线程 测试,弹出“123”。
分析代码:由于定义了全局变量 x,所以x的值成功传递进了,线程 测试中,故弹出“123”


2、下面的例子则不能弹出x的值
 
  1. x = 123
  2. BeginThread 测试
  3. Sub 测试
  4. MessageBox x
  5. End Sub
复制代码

您所在的用户组无法下载或查看附件

 
启动以上脚本,弹出“”,即空,无值。
分析代码:没有定义全局变量 x,所以x的值,无法传递进多线程内。
 


注意

* 变量的定义名称是不能重复的,例如:Global x 和 Dim x 是不能同时使用的。
* 环境变量的使用要特别注意,详细可参见:【院刊】-【201409期】按键精灵知多少之环境变量


如果童鞋们对于本帖里的内容有疑问或者建议,欢迎跟帖讨论~~



本文由按键学院提供技术支持

2个月学会赚大钱的脚本,报名倒计时7天

按键学院10月实战班卷土来袭









    已有3评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/4/9 18:59:28 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    除却巫山不是云

    3#

    呀呀呀 哈哈

    4#

    学习学习学习!

    5#

    55522233

    6#

    这个看看有用

    [url][url=http://bbs.anjian.com/thread-576954-1-1.html]<strong><font size="4">按键精灵14周年庆典火热进行中!点击
    7#

    几乎关于

    8#


    9#

    沙发

    10#

    还是没整明白的说

    11#

    变量名

    12#

    dsfsdvzvffrewr234t4345

    13#


    14#

    3隐藏4图

    15#

    ....................

    16#

    66666666666666666666666666

    17#

    学习学习

    18#

    作用域学习

    19#

    学习了

    20#

    感谢大神分享

    发新话题 回复该主题