python函数局部变量和全局变量同名_python,javascript在函数中同时调用同名的局部变量与全局变量引发的问题...

本文探讨了Python和JavaScript中函数内部局部变量与全局变量同名时引发的问题。在Python中,若函数内部引用全局变量后再定义同名局部变量,会导致UnboundLocalError。解决方案包括避免同名或使用类的成员变量。而在JavaScript中,全局变量在函数内部被同名局部变量覆盖,可能导致undefined。解决方法包括更改局部变量名称或使用this关键字明确引用全局变量。

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

首先在python中:

在python同一函数中调用了全局变量后又在内部定义了与全局变量同名的局部变量,导致引用全局变量那里会报错:

UnboundLocalError: local variable 'a' referenced before

assignment

代码:

1 defnumCheck():2 print("输出1:",a) #报错处,目的是想引用全局中的99

3 a = 10

4 print("输出2:", a)5 deffun():6 print("输出3:", a)7 a = 99

8 numCheck()9 fun()10 print(a)

运行结果:会直接报错。

解决方式:

方式1:在函数中要定义局部变量时不要与全局变量同名, 即在numCheck( )中定义的局部变量换个名。

方式2:进入函数时先定义与全局变量同名的局部变量,就不会报错了,

但是这样就没有达到引用全局变量a之后再定义与全局变量同名的局部变量a 的目的,所以引入方式3。

方式3:这里涉及到全局变量和局部变量的区分,如果想使用全局变量a之后再使用同名的局部变量a,

就应该是把方法和变量定义在类里。通过类的成员变量去引用全局变量。

代码如下:

1 classmine:2 def __init__(self,a):3 self.a =a4 self.b = 100

5

6 defnumCheck(self):7 print("输出1",self.a)8 a = 10

9 print("输出2", a)10

11 deffun(self):12 print("输出3:", self.a)13

14 if __name__ == "__main__":15 a = 99

16 myclass =mine(a)17 myclass.numCheck()18 myclass.fun()19 print(a)20 print("类中的b为:",myclass.b) #调用类中的变量b

输出结果:

javascript中

(听说有的前端面试会考)

同一函数中调用了全局变量后又在内部定义了与全局变量同名的局部变量,

导致想引用的全局变量变为  undefined  (这个错误类似于先引用了a才定义a,前面个a并不会指向全局变量a那里,原因我也不知道2333)

代码:

1 < script type = "text/javascript" >

2 functionf1(){3 console.log("f1中没赋值之前调用a: " +a);4 var a = 10;5 console.log("f1中赋值后调用a: " +a);6 }7

8 functionf2(){9 console.log("f2中调用a的值为: " +a);10 }11

12 var a = 99;13 f1();14 f2();15 console.log("直接输出a的值: " +a);16

运行结果:

解决方法:

1. 改局部变量名。

2. 在【console.log("f1中没赋值之前调用a: "+ a);】处的a前面加this

即:console.log("f1中没赋值之前调用a: " + this.a);

能运行得:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值