JavaScript执行(二):闭包和执行上下文
函数的执行的相关内容:
闭包(closure)
在上世纪60年代,主流的编程语言是基于lambda演算的函数式编程语言,所以这个最初的闭
包定义,使用了大量的函数式术语。一个不太精确的描述是“带有一系列信息的λ表达式”。
对函数式语言而言,λ表达式其实就是函数。
--《The Computer Journal》-《The mechanical evaluation of expressions》[applicative expression和closure的概念]
在古典的闭包定义,闭包包含两个部分:
环境部分
-环境
-标识符列表表达式部分
JavaScript标准中,与古典闭包的定义对应的JavaScript组成部分:
环境部分
-环境:函数的词法环境(执行上下文的一部分)
-标识符列表:函数用到的未声明的变量表达式部分:函数体
至此,我们可以认为,JavaScript中的函数完全符合闭包的定义。
执行上下文:执行的基础设施
梳理一下JavaScript经过不同版本和演变的执行上下文的概念:
在ES3中,包含三个部分:
scope:作用域,也常常被叫做作用域链。
variable object: 变量对象,用于储存变量的对象。
this value: this值。
在ES5,改进了命名方式:
lexical environment: 词法环境,当获取变量时使用
Veriable environment: 变量环境,当声明变量时使用
this value: this值。
在ES2018中,做了以下改变,this被合入lexical environment,但是增加了不少内容。
lexical environment: 词法环境,当获取变量时使用
Veriable environment: 变量环境,当声明变量时使用
code evaluation state: 用于恢复代码执行位置
Function: 执行任务是函数时使用,表示正在被执行的代码。
ScriptOrModule: 执行的任务是脚本或是模块时使用,表示正在被执行的代码
Realm: 使用的基础库和内置对象实例
Generator: 仅生成器上下文有此属性,表示当前生成器
var 声明与赋值
let
此文章为7月Day7学习笔记,内容来源于极客时间《重学前端》,日拱一卒,每天进步一点点💪💪