您的位置:首页 > Web前端 > JavaScript

简单理解JS作用域问题

2013-05-28 17:03 351 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: