闭包 (全局变量与局部变量)

Posted yu121

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包 (全局变量与局部变量)相关的知识,希望对你有一定的参考价值。

报错:UnboundLocalError: local variable ‘t‘ referenced before assignment

技术图片

在 Python 中,如果一个函数使用了和全局变量相同的名字且改变了该变量的值,那么该变量就会变成局部变量,

那么就会造成在函数中我们没有进行定义就引用了,所以会报该错误。

引用全局变量,并在函数中对它进行修改:

技术图片

我们在开发中能尽量避免使用全局变量的就尽量避免使用。
因为不同模块,不同函数都可以自由的访问全局变量,可能会造成全局变量的不可预知性。
比如程序员甲修改了全局变量 t 的值,
然后程序员乙同时也对 time 进行了修改,如果其中有错误,这种错误是很难发现和更正的。

这时候使用闭包:

技术图片

这里最直接的表现就是全局变量 t 至此至终都没有修改过,
这里还是用了 nonlocal 关键字,表示在函数或其他作用域中使用外层(非全局)变量。

这种内部函数的局部作用域中可以访问外部函数局部作用域中变量的行为,我们称为:闭包。
更加直接的表达方式就是,当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包。

以上是关于闭包 (全局变量与局部变量)的主要内容,如果未能解决你的问题,请参考以下文章

闭包, 引入局部变量, 全局变量等

函数与变量作用域

Javascript中局部变量和全局变量还有闭包的概念

理解闭包

JavaScript设计模式与开发实践-读书笔记闭包和高阶函数

Javascript闭包(Closure)