美文网首页JS学习笔记
JS作用域(2)- 生成

JS作用域(2)- 生成

作者: zh2443 | 来源:发表于2018-11-04 21:56 被阅读0次

本篇初步介绍作用域的概念及产生过程。

执行期上下文

上篇说了函数在执行的前一刻,会进行预编译过程,创建一个执行期上下文对象:AO或GO。它定义了函数执行期的环境,且每次调用都会产生一个新的执行期上下文对象,在函数调用结束后,该对象立马销毁。

作用域

每个函数对象都会有一个[[scope]]属性,该属性就是函数的作用域,它存储了执行期上下文的集合,该属性只能JavaScript引擎调用。

作用域链

[[scope]]中存储的执行期上下文集合呈链式结构,我们把这种结构叫做作用域链。

作用域的生成过程

我们通过如下的一个函数来分析函数作用域的生成过程。

首先,a函数在定义时,会生成如下作用域:

然后,执行a函数,生成如下作用域:

a函数执行时,b函数定义,b定义时,生成如下作用域,从图中可以看出,b在定义时的作用域直接指向a执行时生成的执行期上下文,它们共用相同的执行期上下文。

b函数执行时,生成如下的作用域:

当b执行完成后,b的作用域变回到b定义时的状态,同理,a执行完成后,a的作用域也变回到a定义时的状态。

通过作用域内部保存的作用域链,我们可以按照该链至顶向下查找变量(也即从函数内部向其外部查找)。

相关文章

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • JS作用域(2)- 生成

    本篇初步介绍作用域的概念及产生过程。 执行期上下文 上篇说了函数在执行的前一刻,会进行预编译过程,创建一个执行期上...

  • JavaScript的作用域和作用域链

    [[scope]]1.函数创建时生成的一个JS内部的隐式属性,由JS引擎来读取;2.函数存储作用域链的容器,作用域...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS 作用域链、导入导出

    1. JS 的作用域链 作用域在 JS 中表示变量的可访问性和可见性。JS 作用域有 3 种:1. 全局作用域;2...

  • 2018-12-18

    JS高级 作用域&作用域链 作用域: 1.作用域的个数:n(函数声明的个数)+1(全局作用域)2.作用域不会存储变...

  • 2020-05-15 浅谈js中的闭包

    一、情景引入: 关于js的作用域,我们都知道: 1.js的作用域分两种,全局和局部 2.在js作用域环境中访问变量...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • PHP变量作用域

    变量作用域:1,全局作用域global,2,局部作用域,3,静态作用域 1,与js相似,变量写在函数以外叫做全局变...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

网友评论

    本文标题:JS作用域(2)- 生成

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