概念简析:
作用域
是指程序源代码中定义变量的区域
执行上下文
JavaScript 引擎创建了执行上下文栈来管进行上下文的执行管理;其工作原理是:当执行一个函数的时候,就会创建一个执行上下文,并且压入执行上下文栈,当函数执行完毕的时候,就会将函数的执行上下文从栈中弹出
//Ex1:
var scope = "global scope";
function checkscope(){
var scope = "local scope";
function f(){
return scope;
}
return f();
}
checkscope();
//Ex2:
var scope = "global scope";
function checkscope(){
var scope = "local scope";
function f(){
return scope;
}
return f;
}
checkscope()();
//关于这两个example也可以根据this指向来分析得出其值
关于词法作用域的分析:
- 两者输出打印都是:
local scope
。Why?请记住
- js采用词法(静态)作用域;
- 词法作用域函数的作用域基于函数创建的位置
(f()创建的时候在checkscope函数里面;因此变量查找首先是里面的local scope
)
关于执行上下文的分析
关于Ex1:
其执行上下文为:
ECStack.push(<checkscope> functionContext);
ECStack.push(<f> functionContext);
ECStack.pop();
ECStack.pop();
关于Ex2:
其执行上下文为:
ECStack.push(<checkscope> functionContext);//执行完返回fn();再创建fn的执行上下文再pop()
ECStack.pop();
ECStack.push(<f> functionContext);
ECStack.pop();