首先在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);
能運行得: