首先在python中:
在python同一函数中调用了全局变量后又在内部定义了与全局变量同名的局部变量,导致引用全局变量那里会报错:
UnboundLocalError: local variable 'a' referenced before assignment
代码:
1 def numCheck(): 2 print("输出1:",a) #报错处,目的是想引用全局中的99 3 a = 10 4 print("输出2:", a) 5 def fun(): 6 print("输出3:" , a) 7 a = 99 8 numCheck() 9 fun() 10 print(a)
运行结果:会直接报错。
解决方式:
方式1:在函数中要定义局部变量时不要与全局变量同名, 即在numCheck( )中定义的局部变量换个名。
方式2:进入函数时先定义与全局变量同名的局部变量,就不会报错了,
但是这样就没有达到引用全局变量a之后再定义与全局变量同名的局部变量a 的目的,所以引入方式3。
方式3:这里涉及到全局变量和局部变量的区分,如果想使用全局变量a之后再使用同名的局部变量a,
就应该是把方法和变量定义在类里。通过类的成员变量去引用全局变量。
代码如下:
1 class mine: 2 def __init__(self,a): 3 self.a = a 4 self.b = 100 5 6 def numCheck(self): 7 print("输出1",self.a) 8 a = 10 9 print("输出2", a) 10 11 def fun(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 function f1(){ 3 console.log("f1中没赋值之前调用a: " + a); 4 var a = 10; 5 console.log("f1中赋值后调用a: " + a); 6 } 7 8 function f2(){ 9 console.log("f2中调用a的值为: " + a); 10 } 11 12 var a = 99; 13 f1(); 14 f2(); 15 console.log("直接输出a的值: " + a); 16 </script>
运行结果:
解决方法:
1. 改局部变量名。
2. 在【console.log("f1中没赋值之前调用a: "+ a);】处的a前面加this
即: console.log("f1中没赋值之前调用a: " + this.a);
能运行得: