<script> var a =1 function a() { console.log("sdfdsf") } a() </script>
Uncaught TypeError: a is not a function
原因在于javescript先定义了函数名(函数声明优先于变量声明),在定义变量名,所以先定义函数 a() ,有定义了 变量 a ,导致 a() 函数 被覆盖(解决:变量名不和函数名重复)
a = 1 def a(): print("sdfsd") a() <<<sdfsd
对于pyhton来说正常的自上而下定义
a = {} b = c = a c["x"] ="y" print(a,b,c) <<<{'x': 'y'} {'x': 'y'} {'x': 'y'} c = "d" print(a,b,c) <<<{'x': 'y'} {'x': 'y'} d
图示:
三个变量指向同一个内存地址,任何一个变量对他们修改,都是修改的是同一个内存地址中的值
<script> var a ={a:"1"} //key 可以不加双引号 var b = a a.x = a = {a:"2"} //相当给字典添加了一个key(a) val({a:"2"}) 现在字典对象变成{a:"1",x:{a:"2"}},变量名a 指向--{a:"1"} 变量名b指向--{a:"1",x:{a:"2"}} console.log(a.x) //undefined console.log(b.x) //{a: "2"} console.log(a) //{a: "2"} console.log(b) //{a:"1",x:{a:"2"}} </script>
图示: