前端训练营深入理解js

68 阅读2分钟

JS基本概念

image.png

编程范式:!“函数”一等公民地位!

特点:单线程动态、弱类型、面向对象、函数式、解释类语言、JIT、安全、性能差

弱类型:声明变量不需要指定类型,纯函数:不同时间点用相同参数传入能得到相同结果

JS线程与 GUI线程互斥

数据类型

image.png

复杂数据类型原始值会被改变,基础数据类型原始值不会被改变

作用域

image.png

PS:在 JavaScript 中,标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头。标识符与字符串不同之处在于字符串是数据,而标识符是代码的一部分。在 JavaScript 中,无法将标识符转换为字符串,但有时可以将字符串解析为标识符。

变量提升

image.png

let,const提前访问即未定义变量时,访问变量会报错。

var变量会提前被JS赋值 UNDEFINED,没有定义提前访问var会返回undefined

变量提升的意义:代表JS非纯解释性语言,存在编译过程

JS怎么执行

image.png

优化代码过程:JIT,相同代码多次出现,标记为"热代码"即缓存起来,下次相同出现直接执行

代码示例:

image.png

词法环境不等同于词法作用域

image.png

image.png

image.png

创建执行上下文时:绑定This,创建词法环境,创建变量环境

image.png 词法环境放const,func,变量环境放var

outer示例:

const myName = 'zq'

function name1(){
    console.log(myName)
}

function name2(){
    console.log(myName)
}

name1()
name2()

执行结果:

zq
zq

过程:outer通过作用域链逐层向外(上一级)寻找,并指向未被调用的环境

image.png ----解释为什么只改变值不改变地址,因为只改变了堆空间内的值。

image.png ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶(下一个压入栈的活动记录的顶部),是栈指针。

EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部(当前活动记录的底部),是帧指针。

JS进阶知识点

闭包

image.png

本质:未被回收的对象 缺点:内存不容易被回收,会造成内存泄漏

“通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭,但如果这个闭包以后不再使用的话,就会造成内存泄漏。

如果用闭包的函数是个局部变量,等函数销毁后,在下次 avaSonpt擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么 Javasorpt引的垃圾回收器就会回收这块”

this

image.png

垃圾回收

image.png

事件循环

image.png 先执行微任务,后执行宏任务

image.png

课程总结

image.png