JavaScript执行上下文的处理过程

  介绍

小编给大家分享一下JavaScript执行上下文的处理过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

在《深入学习js之——执行上下文栈》中说过,当JavaScript代码执行一段可执行代码(可执行代码)时,会创建对应的执行上下文(执行上下文)

对于每一个执行上下文,都有三个重要的属性:

变量对象(变量对象VO)
作用域链(作用域链)

本文我们结合着这三个部分的内容,讲讲执行上下文的具体处理过程。

思考题

在《深入学习js之——词法作用域和动态作用域》中,提出这样一道思考题:

//思考题一:   var=胺段?全球scope";   函数checkscope () {   var=胺段?当地scope";   函数f () {   返回范围;   }   返回f ();   }   checkscope ();//思考题二:   var=胺段?全球scope";   函数checkscope () {   var=胺段?当地scope";   函数f () {   返回范围;   }   返回f;   }   checkscope () ();

两段代码都会打印<代码>局部范围> 执行上下文栈和<强>执行上下文强劲的具体变化过程。

具体分析

我们分析第一段代码:

var范围=叭騭cope";   函数checkscope () {   var=胺段?当地scope";   函数f () {   返回范围;   }   返回f ();   }   checkscope ();

执行过程如下:

1,执行全局代码,创建全局执行上下文,<强>全局上下文被压入执行上下文栈

ECStack=[   中   ];

2,全局上下文初始化

globalContext={   签证官:(全球)   范围:[globalContext.VO],   :globalContext.VO   }

2,初始化的同时,checkscope函数被创建,保存作用域链到函数内部的属性<代码>[[范围]]

checkscope。[[scope]]=[   globalContext.VO   ];

3,执行checkScope函数,创建checkScope函数执行上下文,checkScope函数执行上下文被压入执行上下文栈:

ECStack=[   checkscopeContext,   中   ];

4, checkscope函数执行上下文初始化:

1。复制函数[[scope]]属性创建作用域链,
2。用参数创建活动对象,
3。初始化活动对象,即加入形参,函数声明,变量声明,
4。将活动对象压入checkscope作用域链顶端,

同时f函数被创建,保存作用域链到f函数的内部属性<代码>[[范围]]

checkscopeContext={   AO: {   参数:{   长度:0   },   范围:定义,   f:引用函数f () {}   },   范围:(AO, globalContext.VO),   :未定义的   }

5,执行f函数,创建f函数执行上下文,f函数执行上下文被压入执行上下文栈

ECStack=[   fContext,   checkscopeContext,   中   )

6 f函数执行上下文初始化,以下跟第4步相同:

1。复制函数<代码>[[范围]]> 2。用参数创建活动对象
3。初始化活动对象,即加入形参,函数声明,变量声明
4。将活动对象压入f作用域链顶端 fContext={   AO: {   参数:{   长度:0   }   },   范围:[AO, checkscopeContext。AO, globalContext.VO],   :未定义的   }

7 f函数执行,沿着作用域链查找值范围,返回范围值

8 f函数执行完毕,f函数上下文从执行上下文栈中弹出

ECStack=[   checkscopeContext,   中   )

9日checkscope函数执行完毕,checkscope执行上下文从执行上下文栈中弹出

ECStack=[   中   )

以上是“JavaScript执行上下文的处理过程”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

JavaScript执行上下文的处理过程