js执行环境、作用域链、闭包、this
执行环境(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相关推荐
- js执行环境作用域和闭包_JavaScript中执行上下文,提升,作用域和闭包的终极指南
js执行环境作用域和闭包 It may seem surprising, but in my opinion the most important and fundamental concept to ...
- js 执行环境 活动对象 变量对象 作用域链的理解
看一下是知乎大神对于 js 执行环境 活动对象 变量对象 作用域链的解释 假设在全局环境下定义了函数pub()和变量pubvar: var pubvar = 1; function pub () {v ...
- js 预编译 解释执行 作用域链 闭包
<script>var a,b = 1;function c(x){var aa = 2;function d(){var ab = 3;}}var d = function(){//.. ...
- JavaScript执行环境 + 变量对象 + 作用域链 + 闭包
闭包真的是一个谈烂掉的内容.说到闭包,自然就涉及到执行环境.变量对象以及作用域链.汤姆大叔翻译的<深入理解JavaScript系列>很好,帮我解决了一直以来似懂非懂的很多问题,包括闭包.下 ...
- JS高级——函数执行、作用域链内存结构图
一.JavaScript的执行过程 假如我们有下面一段代码,它在JavaScript中是如何被执行的呢? 1.1 第一步:初始化全局对象 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Glo ...
- 你不懂的JS学习笔记(作用域和闭包)
You don't KnowJS 引语:你不懂的JS这本书github上已经有了7w的star最近也是张野大大给我推荐了一波,阅读过之后感觉对js的基础又有了更好的理解.本来我是从来不这种读书笔记的, ...
- 深入理解闭包系列第二篇——从执行环境角度看闭包
前面的话 本文从执行环境的角度来分析闭包,先用一张图开宗明义,然后根据图示内容对代码进行逐行说明,试图对闭包进行更直观的解释 图示 说明 下面按照代码执行流的顺序对该图示进行详细说明 function ...
- js函数、作用域和闭包
JavaScript-作用域.块级作用域.上下文.执行上下文.作用域链 一.函数 1.函数定义 函数是一段可以反复调用的代码块.函数可以接收输入的参数,不同的参数会返回不同的值 2.函数的声明方式 主 ...
- JS - 自由变量与作用域链
先解释一下什么是"自由变量". 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量.如下图 如上程序中,在调用fn() ...
- 带有执行环境的函数 - 闭包
学习 JavaScript 的同学都会面对闭包,总觉得很难,你会看到闭包各种版本的定义,即使把闭包的概念背会也不一定的能够理解闭包.想要掌握闭包,需要看很多关于闭包的资料,加上对 JavaScript ...
最新文章
- 【Java】 查找数组中指定元素之 顺序查找 与 二分查找
- 【收集】Web开发工具
- android学习笔记34——ClipDrawable资源
- 实战SSM_O2O商铺_10【商铺注册】Service层的实现
- 二叉查找树的C语言实现(一)
- 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
- Spring(二)IOC底层实现原理
- php版本7历史,php的版本发展历史(1995-2020)
- 【scala】IDEA运行scala程序:Error:scalac: bad option: ‘-make:transitive‘
- java定时任务_java:springBoot使用@Scheduled注解配置定时任务
- @codeforces - 786E@ ALT
- hadoopsdk使用_Hadoop的一些基本操作
- SM2258XT错误代码及中文翻译
- u盘为什么显示在工具栏而不显示在计算机里,为什么U盘后插入后不显示?
- ap mt7260a 华硕_带你入坑,用MT7620A带USB口的路由器搭建一个私有网盘
- 研究生的生活原来是酱紫的……
- 什么软件有html5游戏,多款好玩HTML5小游戏带你认识HTML5优势
- nginx界面管理工具之nginxWebUI 搭建与使用
- 环信sdk android 聊天,Android基于环信SDK开发IM即时聊天
- ng2 绑定输出html,Angular2的数据绑定