python 和 js 变量作用域问题的不理解
本人目前刚学习python
, 遇到了关于变量作用域的一些问题, 如下:
下面这个就不是非常明白
a = 3
def f():
a += 4
print(a)
f() # UnboundLocalError: local variable 'a' referenced before assignment
然后如果稍微改一下:
a = 3
def f():
b = a + 4
print(a)
f() # 3
这里新声明了一个变量b
, 对a
进行了引用, 然后就可以访问到a
了, 不是明白为什么
另外如果将代码 1 换成js
, 结果又不同
var a = 3
const f = () => {
a += 4
console.log(a)
}
a() // 7
f() // 7
在js
中不仅仅能够访问到全局变量, 甚至可以对全局变量进行修改, 所以在js
里面作用域机制和python
又有什么区别?
另外, 本人所了解到js
与python
都是静态作用域, 原理应该相同, 但是上面显示的结果却很不一样, 麻烦能有前辈清楚的解答一下, 本人才学疏浅, 见谅!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我来给你解释一下吧,
对于举例中的python和js中var定义的变量,他们作用域规则相似
不同点
var
(我们先不讨论let和const),否则就是直接调用全局的global 变量名
基于以上前提知识,请看注释中的解释
Python的代码
Javascript的代码
在
python
中a += 4 其实就是a = a + 4
此时 相当于在函数内部声明了变量 a, 所以是调用不到外部的a的。
而在 js 中 a 并不是声明的新变量,所以结果会不同。
js 中声明变量是需要
var
之类的关键字的,python 不需要如果想要python 中的 a 的指向全局需要明确指定
python 的代码转换为 js 代码其实是这样的: