执行环境(execution context) 是js中非常重要的概念,它定义了变量或函数能够访问的其它数据。事实上执行环境中还包含了很多js里面很多重要的概念,比如作用域链、闭包、this指向、变量对象活动对象等等,这里我以执行环境的过程为顺序大致总结一下,将这些知识点串联起来,加深理解。

执行环境也可以称作执行上下文,每当函数调用的时候都会创建一个执行上下文。执行上下文分为两个阶段: 创建阶段和执行阶段。

一、创建阶段(编译阶段,函数被调用,但还没有执行函数内部代码)

创建阶段包括创建变量对象、创建作用域链、确定this指向。

1. 创建变量对象(variable object)

变量对象的属性包含当前执行上下文的arguments、变量、函数。

变量对象的创建过程:  检查当前执行上下文的参数,创建arguments对象 -> 检查当前执行上下文的函数声明,创建以该函数为名的属性,将其值指向函数所在内存地址的引用 -> 检查当前执行上下文的变量声明,创建以该变量为名的属性,将其值赋值为undefined.

这也就解释了为什么会发生变量声明提升。

2. 创建作用域链

var a = 0;
function fun(){var a = 10;infun(){console.log(a); //10}infun();
}
fun();
console.log(a); //0

作用域链可以看作一个数组,在上面的例子中&#x

js执行环境、作用域链、闭包、this相关推荐

  1. js执行环境作用域和闭包_JavaScript中执行上下文,提升,作用域和闭包的终极指南

    js执行环境作用域和闭包 It may seem surprising, but in my opinion the most important and fundamental concept to ...

  2. js 执行环境 活动对象 变量对象 作用域链的理解

    看一下是知乎大神对于 js 执行环境 活动对象 变量对象 作用域链的解释 假设在全局环境下定义了函数pub()和变量pubvar: var pubvar = 1; function pub () {v ...

  3. js 预编译 解释执行 作用域链 闭包

    <script>var a,b = 1;function c(x){var aa = 2;function d(){var ab = 3;}}var d = function(){//.. ...

  4. JavaScript执行环境 + 变量对象 + 作用域链 + 闭包

    闭包真的是一个谈烂掉的内容.说到闭包,自然就涉及到执行环境.变量对象以及作用域链.汤姆大叔翻译的<深入理解JavaScript系列>很好,帮我解决了一直以来似懂非懂的很多问题,包括闭包.下 ...

  5. JS高级——函数执行、作用域链内存结构图

    一.JavaScript的执行过程 假如我们有下面一段代码,它在JavaScript中是如何被执行的呢? 1.1 第一步:初始化全局对象 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Glo ...

  6. 你不懂的JS学习笔记(作用域和闭包)

    You don't KnowJS 引语:你不懂的JS这本书github上已经有了7w的star最近也是张野大大给我推荐了一波,阅读过之后感觉对js的基础又有了更好的理解.本来我是从来不这种读书笔记的, ...

  7. 深入理解闭包系列第二篇——从执行环境角度看闭包

    前面的话 本文从执行环境的角度来分析闭包,先用一张图开宗明义,然后根据图示内容对代码进行逐行说明,试图对闭包进行更直观的解释 图示 说明 下面按照代码执行流的顺序对该图示进行详细说明 function ...

  8. js函数、作用域和闭包

    JavaScript-作用域.块级作用域.上下文.执行上下文.作用域链 一.函数 1.函数定义 函数是一段可以反复调用的代码块.函数可以接收输入的参数,不同的参数会返回不同的值 2.函数的声明方式 主 ...

  9. JS - 自由变量与作用域链

    先解释一下什么是"自由变量". 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量.如下图 如上程序中,在调用fn() ...

  10. 带有执行环境的函数 - 闭包

    学习 JavaScript 的同学都会面对闭包,总觉得很难,你会看到闭包各种版本的定义,即使把闭包的概念背会也不一定的能够理解闭包.想要掌握闭包,需要看很多关于闭包的资料,加上对 JavaScript ...

最新文章

  1. 【Java】 查找数组中指定元素之 顺序查找 与 二分查找
  2. 【收集】Web开发工具
  3. android学习笔记34——ClipDrawable资源
  4. 实战SSM_O2O商铺_10【商铺注册】Service层的实现
  5. 二叉查找树的C语言实现(一)
  6. 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
  7. Spring(二)IOC底层实现原理
  8. php版本7历史,php的版本发展历史(1995-2020)
  9. 【scala】IDEA运行scala程序:Error:scalac: bad option: ‘-make:transitive‘
  10. java定时任务_java:springBoot使用@Scheduled注解配置定时任务
  11. @codeforces - 786E@ ALT
  12. hadoopsdk使用_Hadoop的一些基本操作
  13. SM2258XT错误代码及中文翻译
  14. u盘为什么显示在工具栏而不显示在计算机里,为什么U盘后插入后不显示?
  15. ap mt7260a 华硕_带你入坑,用MT7620A带USB口的路由器搭建一个私有网盘
  16. 研究生的生活原来是酱紫的……
  17. 什么软件有html5游戏,多款好玩HTML5小游戏带你认识HTML5优势
  18. nginx界面管理工具之nginxWebUI 搭建与使用
  19. 环信sdk android 聊天,Android基于环信SDK开发IM即时聊天
  20. ng2 绑定输出html,Angular2的数据绑定

热门文章

  1. 使用 Laravel 和 Vue 创建单页应用程序
  2. C语言大型连续剧(第三集)——函数帝国的崛起
  3. 密封容器泄漏检测控制系统设计
  4. “Do better” 让百度更有温度
  5. 《正在爆发的互联网革命》
  6. 【CSS】【面试题】牛客网CSS专项练习部分答案及解析(更新中...)
  7. 关于c#读取excel数据。
  8. 为什么现在的游戏感觉没以前好玩的真正原因
  9. AIGC:【LLM(八)】——Baichuan2技术报告
  10. 样板工程为什么变成了豆腐渣