变量的作用域(作用域:指的就是一段代码的作用范围)
一、变量的作用域
1.全局变量(在代码中任何地方都能够访问得到的变量,拥有全局的作用域)
A.最外层函数外面定义的变量
var a=1; function aa(){ alert(a); }; aa(); 结果:1
B.没有定义直接赋值的变量,拥有全局属性
var a; function aa(){ a=1; }; aa(); alert(a); 结果:1
2.局部变量(只能在固定的代码片段(函数片段中)中访问得到)----可以提高程序的逻辑性和安全性,减少名字的冲突
A.函数内部定义的变量,就是局部变量
var a=1; function aa(){ var a=2; alert(a); }; aa(); 结果:2 alert(a); 结果:1
B.参数也是局部变量。
function aa(b){ var b=2; alert(b); }; aa(b); 结果:2 alert(b); 结果:报错
二、javascript预解析顺序
a、<script></script>块依次解析。
b、解析代码运行的环境。
c、对标识符(关键字)(var function )进行解析,解析到相应的环境下
alert(a);var a=1; 结果:undefined var a=1;alert(a); 结果:1 function aa(){alert(1)};aa(); 结果:1 aa();function aa(){alert(1)}; 结果:1
d、如果还有<script></script>块再按照上面的步骤依次解析
三、名词解释
A.环境
1.宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序。如:web浏览器,一些桌面应用系统等。即由web浏览器或是这些桌面应用系统早就的环境即宿主环境。
2.执行环境:执行环境定义了变量或函数有权访问的其他数据决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。
var a=1; function aa(){ var a=2; alert(a); bb(); function bb(){ alert(a); } } aa(); alert(a); 弹出结果:2-----2-----1
执行的环境决定了变量和函数的访问权限
B.作用域(一段代码的作用范围)
C.作用域链(在一个执行环境中有权访问的变量和函数能够有序有机的进行访问)