简单理解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。

posted @ 2013-05-28 17:03  风残零度  阅读(194)  评论(0)    收藏  举报