深入理解js| 青训营笔记

36 阅读2分钟

深入理解JS

一、js的基本概念 1、browser进程 2、gpu进程 3、渲染进程: GUI线程:与JS线程互斥 JS线程:可以改变页面的元素 事件触发线程 定时器触发线程 网络线程 4、插件进程

5、js相对来说是安全的因为他是在浏览器上运行的。 6、基本数据类型: 字符串、undefined、数字、null js中 复杂数据类型赋值是地址,基础数据类型赋值是值 复杂数据类型存在堆上,基础执行类型存在栈上 7、变量提升:只针对var和函数,const和let没有变量提升

二、js怎么执行 源代码(经过语法分析、词法分析->执行上下文)——>AST——>字节码(——>机器码)——>机器码 AST语法树

1、执行上下文:包括变量环境、词法环境、this (1)变量环境里面有一个指向外部函数执行上下文的指针,形成了作用域链、词法环境 (2)全局执行上下文:每个生命周期内只有一个 (3)函数执行上下文:执行结束的时候该执行环境从栈顶弹出。

递归深度太深可以用迭代。 变量环境放var定义的变量。 词法环境放函数。 outer指向外部变量环境的一个指针。

const myName='zq'; function name1(){ console.log(myName); } function name2(){ console.log(myName); }

三、js的进阶知识

1、闭包:什么叫闭包?(面试常问) 2、this 普通函数的this指向window 对象调用指向对象 3、new 创建临时对象 将this指向临时对象、执行构造函数、返回临时对象

this指向的例子: const obj={ name:'lizi' showName(){ console.log(this.name) } } const obj1={ name:'bytedance' } obj.showName.apply(obj1)

4、垃圾回收:分为堆和栈 堆:分为新生代空间和老生代空间 新生代的垃圾回收叫负垃圾回收,把新生代空间分为对象区域(垃圾标记,把被标记的活跃数据放到空闲区域,再将空闲区域和对象区域翻转掉)、空闲区域 老生代空间垃圾回收:占用内存大的对象,首先标记,被标记对象清除,然后主垃圾回收器把这些东西分成碎片进行处理。 5、事件循环 js是单线程,微任务——>宏任务 主线程队列执行好后要先去微任务队列执行,如果执行宏任务的时候产生很多微任务,再下一次循环时也要先执行微任务。