最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript基础及其原理(五)—— 执行上下文

    正文概述 掘金(Akii)   2021-07-16   524

    前言

    本文首发于笔者的个人博客,欢迎围观。

    如果在阅读过程发现文章有表达不当的地方,欢迎在评论区指出。

    执行上下文

    我们可以将执行上下文想象成一个大盒子,在这个盒子里面执行了所有Javascript代码。

    将这个盒子看成由两个组件构成,分别是:存储部分以及代码部分

    存储部分:即变量环境,其中以键值对的形式存储变量或函数声明。

    代码部分:即执行线程,对于其中的代码一次只执行一行。

    JavaScript基础及其原理(五)—— 执行上下文

    为什么一次只会执行一行呢?

    单线程:JavaScript一次只能执行一个命令。

    同步单线程:JavaScript一次只执行一个命令并以特定顺序执行。

    下面我们通过实例来了解,执行上下文是如何处理JavaScript程序的。

    实例分析(图解)

    var n = 2
    function square (num) {
      var ans = num * num
      return ans
    }
    var square2 = square(n)
    var square4 = square(4)
    

    全局变量的执行上下文

    变量环境

    line 1: 声明变量 n,值为 undefined

    line 2-5: 声明函数 square,值为 {...}

    line 6: 声明变量 square2,值为 undefined

    line 7: 声明变量 square4,值为 undefined

    执行线程

    line 1: 将 2 赋值给 n

    line 6, 7: 调用了 square 函数,进入函数的执行上下文

    square函数的执行上下文

    变量环境

    line 2: 声明变量 num,值为 undefined

    line 3: 声明变量 ans,值为 undefined

    执行线程

    line 6: 将全局变量 n 的值赋给 num,值为 2

    line 3: 将 ans 赋值为 num * num, 值为 4

    line 4: 返回 ans,将 ans 的值赋给全局变量 square2 ,值为4return 之后函数执行上下文将会被销毁。

    square4 变量的赋值大家可以自行尝试,下图为执行到代码第七行的执行上下文。当代码全部执行完毕后,整个执行上下文将会被销毁。

    JavaScript基础及其原理(五)—— 执行上下文

    执行上下文栈

    为了管理执行上下文,JavaScript引擎创建了执行上下文栈。

    执行过程

    1. JavaScript开始解释上述代码时,初始化的时候先将全局上下文压入执行上下文栈。

    JavaScript基础及其原理(五)—— 执行上下文

    1. line 6: 定义 square2 时调用了 square 函数,创建函数执行上下文,将其压入执行上下文。

      执行结束后,该执行上下文被销毁,所以函数执行上下文也会从执行上下文栈中弹出。

      JavaScript基础及其原理(五)—— 执行上下文

    2. line 7: 与 line6 执行过程类似,不再赘述。

    3. 当所有代码运行结束时,全局执行上下文从执行上下文栈中弹出。

      JavaScript基础及其原理(五)—— 执行上下文

    参阅

    How JavaScript Code is executed? | Akshay Saini

    JavaScript深入之执行上下文 | 冴羽

    小结

    JavaScript 所有代码都在执行上下文中执行,而执行上下文栈的出现是为了管理多个执行上下文。

    执行上下文可分为代码部分以及存储部分,相对应为执行线程以及变量环境


    起源地下载网 » JavaScript基础及其原理(五)—— 执行上下文

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元