(七)执行上下文和词法作用域&动态作用域案例分析

概念简析:

作用域是指程序源代码中定义变量的区域
执行上下文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();
原文地址:https://www.cnblogs.com/smileyqp/p/12675336.html