码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端JS基础第一篇:执行上下文与执行栈


    目录

    执行上下文与执行栈

    引言

    什么是执行上下文?

    执行上下文生命周期

    变量对象

    执行上下文的类型

    执行上下文的特点

    执行栈

    执行栈示例


    执行上下文与执行栈

    引言

    对于我们前端开发者来说理解JS程序内部执行机制是必要的,其中一个关键概念就是Js的执行上下文和执行栈。
    执行上下文是JS语言较为底层的知识,学习掌握有助于我们更深入的把握JS这门语言的本质,也有助于理解作用域、闭包、变量提升等相关知识。

    什么是执行上下文?

    代码执行前,浏览器的Js引擎先会创建代码执行的环境来处理此Js代码的转换和执行,代码的执行环境称为执行上下文。
    执行上下文是一个抽象概念,包含当前正在运行的代码以及当前执行环境中的变量、函数声明,参数(arguments),作用域链,this等信息。

    一句话概括:执行上下文就是javascript代码被解析和执行时所在环境的抽象概念。

    执行上下文生命周期

    (1)创建阶段
    生成变量对象、建立作用域链、确定this的指向

    (2)执行阶段
    变量赋值、函数的引用、执行其他代码

    变量对象

    变量对象是与执行上下文相关的数据作用域,存储了上下文中定义的变量和函数声明 变量对象是一个抽象的概念,在全局执行上下文中,变量对象就是全局对象。 在顶层js代码中,this指向全局对象,全局变量会作为该对象的属性来被查询。在浏览器中,window就是全局对象

    执行上下文的类型

    在js中,执行上下文分为以下三种:

    • 全局执行上下文:只有一个,也就是浏览器对象(即window对象),this指向的就是这个全局对象。
    • 函数执行上下文:有无数个,只有在函数被调用时才会被创建,每次调用函数都会创建一个新的执行上下文。
    • Eval函数执行上下文:js的eval函数执行其内部的代码会创建属于自己的执行上下文, 很少用而且不建议使用。

    对于每个执行上下文,都有三个重要属性:变量对象、作用域链(Scope chain)、this

    执行上下文的特点

    1. 单线程,只在主线程上运行;
    2. 同步执行,从上向下按顺序执行;
    3. 全局上下文只有一个,也就是window对象;
    4. 函数执行上下文没有限制;
    5. 函数每调用一次就会产生一个新的执行上下文环境。

    执行栈

    是一种先进后出的数据结构,用来存储代码运行的所有执行上下文

    1. 当 JS 引擎第一次遇到js脚本时,会创建一个全局的执行上下文并且压入当前执行栈
    2. 每当JS 引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部
    3. 当该函数执行结束时,执行上下文从栈中弹出,控制流程到达当前栈中的下一个上下文
    4. 一旦所有代码执行完毕,JS 引擎从当前栈中移除全局执行上下文

    执行栈示例

    1. var a = 1; // 1. 全局上下文环境
    2. function bar (x) {
    3. console.log('bar')
    4. var b = 2;
    5. fn(x + b); // 3. fn上下文环境
    6. }
    7. function fn (c) {
    8. console.log(c);
    9. }
    10. bar(3); // 2. bar上下文环境
  • 相关阅读:
    halcon学习和实践(hdev脚本学习技巧)
    golang生成根证书,服务端证书,用于 tls
    【Azure OpenAI】OpenAI Function Calling 101
    CesiumJS 2022^ 原理[2] 渲染架构之 Primitive - 创建并执行指令
    计算机毕业设计Java新城街道社区的健康档案管理平台(源码+系统+mysql数据库+Lw文档)
    “知识图谱补全”术语:知识图谱补全、三元组分类、链接预测
    python学习笔记(06)---(内置容器-元组)
    Redis基础篇 高速缓存技术与Redis的庐山真面目 AUTHOR:LBY
    【C/C++笔试练习】初始化列表、构造函数、析构函数、两种排序方法、求最小公倍数
    基于web的学校二手书城系统/二手书交易系统
  • 原文地址:https://blog.csdn.net/qq_49900295/article/details/127936798
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号