美文网首页前端你不进来看看?
1-1 JavaScript执行环境 执行栈

1-1 JavaScript执行环境 执行栈

作者: HarryPang | 来源:发表于2018-12-19 00:30 被阅读2次
1.1执行环境

执行环境可以简称为环境,可以理解为JS被解析和执行所在的外部环境。

1.1.1全局执行环境

全局执行环境是最外层的一个环境,根据宿主环境的不同,全局对象也会有所区别,比如在浏览器中全局环境是window,在node中全局环境就是这个文件的module对象。

1.1.2函数执行环境

每次调用一个函数时,都会创建一个新的执行环境,在这个函数内的任何声明都无法在该函数之外的地方访问

1.1.3Eval函数执行环境

在eval()函数中的代码,不建议使用

1.1.4 执行栈

我们先了解一下执行栈内的执行顺序:后进先出,意思就是最早来的最晚走,最后来的最先走(参考下图理解)


image.png

因为JavaScript在浏览器环境中的执行是单线程(就是一次只能做一件事,不能边吃饭边看电视,只能先吃饭再看电视),对于多个任务,只能采用任务队列的方式(就是先吃饭,一定要等吃完饭才能看电视)。

举一个例子(暂时不用去看current execution context这一层,其实就是Execution Context N+1),

  1. 调用 一个函数f1,执行流先进入全局环境
    (Global Execution Context这一层)
  2. f1的环境被推入环境栈中
    (Execution Context N+1这一层按照绿色箭头进入)
  3. 这时候函数f1又调用了函数f2,f2的环境被推入环境栈中
    (Execution Context N+2这一层按照绿色箭头进入)
  4. f2执行完之后就立马离开执行栈
    Execution Context N+2这一层按照红箭头离开
  5. f1执行完之后在f2离开环境栈后再离开环境栈
    Execution Context N+1这一层按照红箭头离开
  6. 全局环境不会消失,除非关闭浏览器或者关闭网页所以Global Execution Context这一层不会消失

看到这里,我们就能理解另外一个概念:执行环境的两个阶段

1. 创建阶段
  • 当函数被调用,但是为执行内部代码之前:
  • 创建一个作用域链
  • 创建变量,函数和参数。
  • 确定this的值。
2, 执行阶段
  • 赋值,引用函数,解释/执行代码。

相关文章

网友评论

    本文标题:1-1 JavaScript执行环境 执行栈

    本文链接:https://www.haomeiwen.com/subject/wxarkqtx.html