作用域就是变量与函数的可访问范围
全局作用域 : 在代码中任何地方都能访问到的对象拥有全局作用域
1、最外层函数和在最外层函数外面定义的变量拥有全局作用域
var a = 10;
function tmp(){
var b = 20;
}
console.log(a);
2、所有末定义直接赋值的变量自动声明为拥有全局作用域
function tmp(){
b = 20;
}
tmp();
console.log(b);
3、所有window对象的属性拥有全局作用域
局部作用域 : 局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部
function tmp(){
var b = 20;
}
tmp();
console.log(b);
作用域链
console.log(a); //undefined
function str(){
console.log(b); //undefined
var b = 5;
console.log(a); //10
b += 5;
function fun(){
console.log(c); //undefined
var c = 3;
b++;
console.log(b); //11
}
fun();
}
var a = 10;
str();
全局GO{
a : undefined --> 10
str : undefined --> function…
}
str AO{
b : undefined --> 5 --> 10
fun : undefined --> function…
}
fun AO{
c : undefined --> 3
}
funAO–>strAO–>GO
fun[[Scope]]里面有funAO、strAO、GO
str[[Scope]]里面有strAO、GO
AO执行完就消失
先看层级关系
有几层就有几个灶
越往里走,能调用的参数越多
main()只有GO,且不算在灶里面
第一层只有GO和自己的AO
从第二层开始,每一层都包括外面一层的AO和GO还有自己的AO
同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。
1442

被折叠的 条评论
为什么被折叠?



