全局变量未定义关于变量那些事2

本文通过三个示例详细解析了JavaScript中局部变量与全局变量的区别,包括变量的作用域、未定义与未赋值的情况,并给出了运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一直在查找全局变量未定义之类的问题,现在正好有机会和大家分享一下.

    

关于全局量变和局部量变

    1.局部量变

 1 <script type="text/javascript">
 2     
 3     function aaa()
 4     {
 5          var a=10;
 6     }
 7     function bbb()
 8     {
 9         alert(a)
10     }
11     aaa()
12     bbb()
13 </script>
运行结果:错误: “a”未义定,a是局部量变,他只属于函数aaa,其实不属于函数bbb

    2.全局量变1

 1 <script type="text/javascript">
 2     var a
 3     function aaa()
 4     {
 5          var a=10;
 6     }
 7     function bbb()
 8     {
 9         alert(a)
10     }
11     aaa()
12     bbb()
13 </script>
    每日一道理
盈盈月光,我掬一杯最清的;落落余辉,我拥一缕最暖的;灼灼红叶,我拾一片最热的;萋萋芳草,我摘一束最灿的;漫漫人生,我要采撷世间最重的———毅力。
运行结果:弹出undefined,这也是量变的类型之一,只不过是undefined类型,他其实不平等与第一种的未义定

    量变的类型是由赋给量变的值定决的,这个时候bbb函数里的a是全局量变,虽然var了,但是并没有指定值,所以是undefined

    3.全局量变2

 1 <script type="text/javascript">
 2     var a
 3     function aaa()
 4     {
 5          a=10;
 6     }
 7     function bbb()
 8     {
 9         alert(a)
10     }
11     aaa()
12     bbb()
13 </script>
运行结果:10,a是全局量变并且通过函数aaa赋了值——10

 ps:我们经常称undefined是未义定,都是通过1和2,undefined在俩种情况下现出:1,真的未义定;2.义定了但是没赋值说明是什么类型

文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。


### 处理 Python 模块中全局变量未定义错误 #### 定义和导入全局变量 为了防止全局变量在模块间使用时出现未定义的情况,应该确保这些变量被正确定义并正确导入到其他模块中。如果一个模块中的全局变量需要在另一个模块中访问,则可以在该模块中显式声明此变量,并通过`import`语句将其引入到目标模块。 对于跨多个文件使用的全局变量,一种常见做法是在单独的一个配置文件或常量文件里集中管理它们。这样做的好处是可以方便地维护和修改共享数据,同时也减少了重复代码的可能性[^2]。 #### 使用 `global` 关键字 当希望在一个函数内部改变某个已经在外部作用域中存在的名称所指向的对象时(比如列表、字典),则需要用到`global`关键字来指明要操作的是外面那个同名对象而不是创建一个新的局部版本。然而需要注意的是,这仅仅适用于同一文件内的不同函数之间;如果是跨越不同的`.py`文件的话,还是得依靠正常的包/模块机制来进行通信[^1]。 #### 解决具体案例中的问题 针对提到的具体情况——即由于尝试重用名为`make_str_from_row()`的第一个函数而在调用`contains_word_in_row()`时报错说找不到名为`row_index`的全局变量的问题,可以从以下几个方面入手: - **确认初始化**:检查是否确实存在这样一个叫做`row_index`的全局变量,并且它已经被赋予了一个初始。 - **适当位置设置`global`**: 如果打算让`row_index`成为真正意义上的全局变量,在首次赋之前应当先声明其为全局变量,例如: ```python def some_function(): global row_index # 声明为全局变量 row_index = value # 给定初或其他逻辑设定 ``` - **模块间的可见性**:考虑到这两个函数位于不同的地方,还需要保证后者能够看到前者定义的东西。可以通过将公共部分提取出来放到第三方.py文件作为工具库的形式实现这一点,之后再分别从中导入所需的组件即可[^3]。 ```python # common_vars.py 文件用于存储公用变量 row_index = None # make_str_from_row 函数所在的文件 from .common_vars import row_index as ri def make_str_from_row(data): nonlocal ri # 或者再次声明 'global' 若在同一文件内 ... # contains_word_in_row 所属的地方同样如此做 from .common_vars import row_index as ri def contains_word_in_row(word, data): ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值