深入理解JS | 青训营笔记

78 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第6天

深入理解JS

JS的基本概念

数据类型

对象:数组、函数
基础类型:字符串、undefined、数字、null、symbol、bigInt、布尔 \

作用域

变量的可访问性和可见性
静态作用域
通过它就能够预测代码在执行过程中如何查找标识符

变量提升

var 定义 有变量提升
let const 没有变量提升,提前访问会报错
function 函数可以先调用后定义
赋值给变量的函数无法提前调用

JS是怎样执行的

当 JS 引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文(execution context 简称EC)”,也叫执行环境

全局执行上下文:代码开始执行时就会创建,将它压执行栈的栈底,每个生命周期内只有一份

函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候执行环境从栈顶弹出

词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成

变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,而后者只用来存储var变量绑定

Outer:指向外部变量环境的一个指针

JS进阶知识点

闭包

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建。
通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。如果引用闭包的函数是个局部变量,等函数销毁后,在下次 JavaScript 引擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么 JavaScript 引擎的垃圾回收器就会回收这块内存。

this

普通函数的this指向是window

对象调用的时候this指向当前对象

先赋值再调用,看调用的地方

构造函数:
1 创建临时对象
2 将this指向临时对象
3 执行构造函数
4 返回临时对象

引用参考

字节前端训练营 深入理解 JS学习资料

祝大家 : 学业有成 , 职场顺利 , 专业能力越来越强 , 拿到自己满意的 offer