== 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
//优先在局部范围内查找 , 找不到回到全局范围内查找
// 找到了 故弹出 undefined

var 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);

 

 

posted @ 2018-08-06 16:54  silvercell  阅读(1831)  评论(0)    收藏  举报