简单理解JS作用域问题
DEMO1:
var sa = 12; function show(){ alert(sa); var sa = 23; alert(sa); } show(); alert(sa);
DEMO2:
var sa = 12;
function show(){ alert(sa); sa = 23; alert(sa); } show(); alert(sa);
解 释:
demo1:
全局作用域定义了一个var sa = 12,函数内部也定义一个了var sa = 23。而函数在调用之前,会存在预编译的过程(给函数内部sa变量分配内存空间),就是把定义的内部sa变量赋值为undefined;然后执行的时候,遇到有数值再赋值给这个变量,另一方面。函数里面优先查找自己的作用域内的变量,如果为找到再向外一层一层的查找,这个函数执行的时候已经存在预编译,又优先查找自己的作用域,所以第一个为undefiend,然后碰到了 var sa = 23;才给sa赋值为23,所以下面这个是23。至于函数外面的哪个alert(sa),他只能获取全局作用域的var sa=12,而不能获取函数里面的sa。
demo2:
全局作用域定义了一个var sa = 12;,函数内没有定义var sa。函数执行的时候查找自己作用域有没有var sa(但是没有),所以向外查找,结果查找了var sa=12;所以第一个是12,然后又一次给外层的var sa=12赋值为23,所以第二个是23,函数外部的alert(sa),在运行函数的时候函数已经吧函数外的var sa=12替换成了23,所以外层也是23。

浙公网安备 33010602011771号