JS基本概念
编程范式:!“函数”一等公民地位!
特点:单线程动态、弱类型、面向对象、函数式、解释类语言、JIT、安全、性能差
弱类型:声明变量不需要指定类型,纯函数:不同时间点用相同参数传入能得到相同结果
JS线程与 GUI线程互斥
数据类型
复杂数据类型原始值会被改变,基础数据类型原始值不会被改变
作用域
PS:在 JavaScript 中,标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头。标识符与字符串不同之处在于字符串是数据,而标识符是代码的一部分。在 JavaScript 中,无法将标识符转换为字符串,但有时可以将字符串解析为标识符。
变量提升
let,const提前访问即未定义变量时,访问变量会报错。
var变量会提前被JS赋值 UNDEFINED,没有定义提前访问var会返回undefined
变量提升的意义:代表JS非纯解释性语言,存在编译过程
JS怎么执行
优化代码过程:JIT,相同代码多次出现,标记为"热代码"即缓存起来,下次相同出现直接执行
代码示例:
词法环境不等同于词法作用域
创建执行上下文时:绑定This,创建词法环境,创建变量环境
词法环境放const,func,变量环境放var
outer示例:
const myName = 'zq'
function name1(){
console.log(myName)
}
function name2(){
console.log(myName)
}
name1()
name2()
执行结果:
zq
zq
过程:outer通过作用域链逐层向外(上一级)寻找,并指向未被调用的环境
----解释为什么只改变值不改变地址,因为只改变了堆空间内的值。
ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶(下一个压入栈的活动记录的顶部),是栈指针。
EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部(当前活动记录的底部),是帧指针。
JS进阶知识点
闭包
本质:未被回收的对象 缺点:内存不容易被回收,会造成内存泄漏
“通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭,但如果这个闭包以后不再使用的话,就会造成内存泄漏。
如果用闭包的函数是个局部变量,等函数销毁后,在下次 avaSonpt擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么 Javasorpt引的垃圾回收器就会回收这块”
this
垃圾回收
事件循环
先执行微任务,后执行宏任务
课程总结