变量类型和计算
- 值类型vs引用类型、堆栈模型、深拷贝
- typeof运算符
- 类型转换、truly和falsely变量
原型与原型链
class和继承
class
- constructor
- 属性
- 方法
继承
- extends
- super
- 扩展或者重写方法
类型的判断instanceof,通常用于判断数组
原型与原型链
每个class都有显示原型 prototype
每个实例都有隐式原型 proto
每个实例的隐式原型指向class的显式原型
原型链的执行规则
先找自身的_proto_如果没有 则一直找 直到找到为止
InstanceOf 这个方法 就是判断这个实例有没有在圆形链里面
闭包与作用域
作用域
- 全局作用域
- 函数作用域
- 块级作用域(ES6新增 语法let、const)
自由变量
- 一个变量在当前作用域没有定义、但是被使用了
- 向上级作用域、一层一层依次寻找、直到找到为止
- 如果到全局作用域都没找到、则报错 xx is not defined
- 总结闭包里的自由变量查找,是在函数定义的地方,向上级作用域查找不是在执行的地方。
this
- 作为普通函数 -> window
- 使用call、apply、bind(返回新的函数)(都可以改变this指向) -> 传入的对象
- 作为对象方法被调用 -> 调用的对象
- 在class方法中被调用 -> 实例对象
- 箭头函数 -> 永远取上级作用域this
- 总结this的取值是在执行时确定的,不是定义时候确定的。
闭包 函数作为返回值、参数。内存不会被释放。自由变量 使用完会被释放。
异步与单线程(js的循环机制)
- js是个单线程语言、js和dom渲染是共用一个进程
- 异步的出现是为了解决js单线程问题
- 异步代码不会阻塞、同步会阻塞代码执行
- 异步的运用场景(网络请求如ajax图片加载、定时任务)
promise解决回调地狱
首先定义个一个 function,里面 new promise 里面写一个ajax(url,success里面resolve、error里面reject)。最后请求调用function的方法,成功就点then有多少个循环调用就使用多少个点then。
JS的循环机制
eventLoop描述:js是个单线程运行的、异步要基于回调来实现、eventloop就是异步回调的实现原理
- 进入到script就是进入到了第一次事件循环
- 遇到同步代码立即执行
- 遇到宏任务把它放入宏任务队列中
- 遇到微任务把它放入微任务队列中
- 执行完所有同步代码
- 执行微任务代码,本次队列清空
- 寻找下一个宏任务,重复上面的执行顺序。
- 以此反复直到清空所有宏任务,这种不断重复的机制被称为事件循环。
在js的引擎里面
- call stack调用栈
- web api在ES6规范之外,浏览器定义的
- event loop事件循环
- callback queue回调函数队列
- 同步代码一行一行的放在Call Stack执行、遇见异步会先记录一下等待时机(定时、网络请求等)、时机到了就移动到callback queue、如果call stack为空(既同步代码执行完毕)Eventloop开始工作、轮询查找callback queue、如果有则移动到call stack、然后继续轮询查找(不断的重复直到任务执行完毕)
event loop和DOM渲染
JS是单线程的,而且和DOM渲染共用一个线程
JS执行的时候,得留一些时机供DOM渲染
当Call Stack空闲的时候,先尝试DOM渲染,再去触发Event Loop机制
宏任务与微任务
- 宏任务: setTimeout, setInterval,Ajax, DOM事件
- 微任务: Promise Async await
- 微任务执行时机比宏任务要早
Promise的基本原理
- Promise是一个类
- Promise类在执行时会传入一个执行器函数,该函数会立即执行
- Promise具有三种状态 Pending Fulfilled Rejected
- Promise状态一旦确定就不可以改变,且状态只能由
-
Pending => Fulfilled(成功) Pending => Rejected(失败)
- 状态的改变由resolve,reject两个方法改变 then方法内部做的事情是状态判断
- 如果是Fulfilled状态则执行成功的回调 如果是Rejected状态则执行失败的回调
- Promise的链式调用需要在then方法中返回一个Promise实例
async/await
- 执行async函数,返回的是一个promise对象
- await 相当于promise的then 所以await后就是promise
- try...catch可捕获异常代替了promise的catch
- 是消灭异步回调的一个方法、语法糖。