js的基本概念
特性
- 创建:c的语法, java的内存管理和数据结构, schema函数作为一等公民, self原型继承
- 单线程 异步, 动态 弱类型, 面向对象 函数式,解释类语言,性能
数据类型
- 基础类型(存在于栈上): string number boolean, null undefined, bigInt, symbol
- 引用类型(对象)(存在于堆上): array, function, object
作用域
- 全局作用域, 函数作用域, 块级作用域
- 变量提升: 预处理 var/function
js是怎么执行的
过程
- 源代码->AST->字节码->机器码
- 源代码分析为AST过程中创建执行上下文
执行上下文
- 全局执行上下文, 函数执行上下文, Eval执行上下文
- 执行上下文包括变量环境(let const 函数声明), 词法环境(var), outer(指向外部环境(根据作用域链)), this, 可执行代码
- ESP会记录当前执行上下文
垃圾回收
- 新生代
- 老生代
js的进阶知识点
闭包
- 嵌套函数中引用外部函数变量, 会创建一个closure变量存储引用的变量
- 引用闭包的函数如果是全局变量,闭包不会被回收
this
- 普通调用,指向global
- 对象调用,指向调用的对象
- call/apply/bind 指向传入的对象
- new调用,指向新创建临时对象; (创建临时对象,this指向临时对象,执行构造函数,根据类型返回)
垃圾回收
- 新生代空间(小,1-8M),分为对象区域和空闲区域,垃圾标记,对象复制,区域反转
- 老生代, 标记清除, 主垃圾回收器会整理,期间js引擎停顿。
事件循环(浏览器)
- 同步代码(执行栈)在主线程执行时,会把异步任务放入任务队列中(分为微任务队列和宏任务队列),然后执行完微任务队列,然后从宏任务队列取出宏任务调入主线程执行
- 微任务有promise.then,object.observe; 宏任务有setTimeout,setInterval