js作用域
1.在没有let之前 有三种分别是全局作用域、函数作用域、eval
2.js的作用域,是静态的 在定义时产生
3.执行函数时,会产生执行上下文(EC) , 分为全局上下文和函数上下文
4.执行上下文包括三部分内容,变量对象(VO)、作用域链、this指向;(vo 是js引擎实现的,我们并不能直接去访问到它, 在全局上下文中,var a = 1; a就声明到了VO中)
举个例子
var a = 1;
function sum() {}
// 此时js引擎会这样去做:
/**
vo(globalContext){
a: 100,
sum: ref to function sum
}
*/
执行上下文是有声明周期的,分为两个阶段,一:创建阶段 二:代码执行阶段
再举个例子
function sum(a, b) {
var c = 10;
var d = function () {};
function total() {}
b = 10;
}
sum(10);
/**
在函数sum创建时,执行上下文会创建一个VO,并激活成AO (VO+arguments => AO)
1.找形参 没有实参就用undefined来代替
2.会查找函数声明
3.变量声明
vo(sum){
a: 10,
b:undefined,
total: ref to function,
c: undefined,
d: undefined
}
*/