== JS-7-作用域 - 全局局部作用域 ==
== JS-7-作用域 - 全局局部作用域 ==
注意解析器预解析找的是 !!!! var开头的变量
全局作用域:
底下能执行,因为作用域的预解析不会被清空
不能上面执行,因为js解析和执行流程限制。<script>
var a=1;
</script><script>
alert(a);
</script>
全局自上而下 , 上面的会存下来。
所以在引入库的时候,先将工具库放在前面的原因。
函数域: 局部作用域
var a = 1;
function fn1(){
alert(a);
var a = 2;
}
fn1();
alert(a);
------------------------
1. 执行预解析: var function 函数
a = undefined;
function fn1(){ ... ... }2. 逐行解读代码
var a = 1; //修改预解析仓库中的值fn();调用代码
函数调用:
函数调用内部也要预解析和逐行执行代码1.预解析
a = undefined;2.逐行执行代码
alert(a); // 弹出 undefined
//优先在局部范围内查找 , 找不到回到全局范围内查找
// 找到了 故弹出 undefinedvar a = 2; //修改局部仓库的 a的值
alert(a); //此时还是在全局中找 a = 1
作用域链:
var a = 1;
function fn1(){
alert(a);
a = 2; // 这里去掉了 var js解析器找不到var 就去上层找了
// 从子集作用域 回到父级作用域找叫作用域链
}
fn1();
alert(a);
var 加和不加影响很大
带参数的函数作用域
var a = 1;
function fn1(a){ // fn1(a) 此处的a 可以理解为 var a; 空的
// 原因: fn1() 调用的时候 没有传入参数
alert(a); // 预解析时候 这里隐含了一个 var a= undefined;
a = 2;
// 从子集作用域 回到父级作用域找叫作用域链
}
fn1();
alert(a);

浙公网安备 33010602011771号