深入理解JS|青训营笔记

76 阅读2分钟

一、JS的基本概念 其于1995年,Brendan Eich开发的一门计算机语言,借鉴了C语言的基本语法、Java语言的数据类型和内存管理、和Scheme语言,将函数提升到“第一公民”的地位,借鉴Self语言,使用基于原型的继承机制。JS包括Browser进程、GPU进程、渲染进程、插件进程、网络进程等。 (一)数据类型
包含对象和基础类型两大类,其中对象涵盖数组、函数等,基础类型涵盖字符串、underfined、数字、null、symbol、biglnt、bool型。
(二)作用域
静态作用域:全局作用域、函数作用域、块级作用域,通过它能预测代码在执行过程中如何查找标识符 (三)变量提升
var有变量提升,let、const没有变量提升,如若提前访问会报错,function函数可以先调用再定义,赋值给变量的函数无法提前调用。
二、JS的执行过程
将源代码进行词法分析和语法分析后,执行上下文并生成AST,又将字节码逐行解释执行为机器码,或将其中热度最高的字节码编译执行为机器码,在下次使用时无需再编译,从而达到优化代码的作用。 当JS引擎解析到可执行代码片段(通常为函数调用)时,就会做一些执行前的准备工作,叫作“执行上下文”。
(一)全局执行上下文:
代码开始执行时就会创建,将它压执行栈的栈底,每个生命周期内只有一份。
(二)函数执行上下文:
当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出。
(1)词法环境:基于ECMAScipt代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能引用的外部词法环境的空值组成;
(2)变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量绑定,而后者知识用来存储var变量绑定;
(3)outer:指向外部变量环境的一个指针。