一、作用域
作用域分为局部作用域和全局作用域,局部作用域又分为块级作用域(let、const)和函数作用域
作用域链:
在函数作用域中,变量向上级一层一层查找,直到找到为止,最高查找到全局作用域就形成了作用域链
二、闭包
1、如何形成:
函数嵌套函数,函数内部可以访问函数外部的变量、函数作为参数被传递;函数作为返回值被返回
2、优点
- 防止数据被外部污染
- 变量持久化
3、缺点
- 需手动清除,否则会一直存在,造成内存泄露,影响性能
三、this指向
1.全局调用 this指向window
2.对象内的⽅法调用 obj.sing() this指向调⽤对象
3.构造函数调用 new Person() this指向实例对象
4.事件处理函数调用 this指向触发事件的dom元素
5 箭头函数的绑定 (没有this) 如果写this, this指向他的上级
如何改变this指向?
call、apply、bind(手动调用),规则一样,参数不一样,语法不同
四、 垃圾回收机制和内存泄漏
1、垃圾回收机制
js中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收机制自动回收
内存的生命周期:内存分配、内存使用、内存回收
有两种实现算法: 引用计数法 标记清除法
2、内存泄漏
内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放 叫做内存泄漏
js中(循环引用、闭包、DOM泄露、 Timers计(定)时器泄露)
五、异步和单线宏任务微任务
js是一门异步单线程语言,自上而下执行,报错就停止,遵循同步优先执行异步在同步执行完毕以后再执行
js内的异步方法:ajax、settimeout、setinterval、promise、async、await
异步宏任务:浏览器、script、ajax、settimeout、setinterval
异步微任务:promise、async、await
先执行微任务再执行宏任务
注意:实例化promise是同步编程(new Promise)