• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
smileyqp
https://github.com/smileyqp
博客园    首页    新随笔    联系   管理    订阅  订阅

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

概念简析:

作用域是指程序源代码中定义变量的区域
执行上下文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();
posted @ 2019-09-02 14:12  smileyqp  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3