这是我参与「第五届青训营 」笔记创作活动的第11天。
作用域和作用域链
作用域
分为全局作用域和局部作用域,全局作用域是指在整个文档中都有效,而局部作用域是指只在某一个区域中有效 局部作用域又分为了函数作用域和块级作用域,函数作用域是指在函数内部定义的变量只能在函数内部中访问,不能在函数外部访问;块级作用域是指let和const定义的变量在大括号外面不能被访问到。
作用域链
js使用一个变量的时候,会先在当前作用域下寻找这个变量,如果找不到,就会去它父级作用域中去寻找,直到找到全局作用域,如果在全局作用域中也找不到,则会报错或者隐式声明,这样一层一层的往上寻找,这样就形成了一条作用域链。
es6新特性
- symbol,值独一无二,不能new
- let和const
- 解构赋值
- 新增了map和set构造函数
- 新增的object.assign()方法可以实现浅复制
- 字符串新增includes()判断字符串是否包含参数字符串
- 函数传递参数时可以用...来不定长传参
- 箭头函数
- 可以使用Class类关键字 10.模块导入导出 11.promise和generator
实现异步的方法
-
回调函数:最基本的异步操作方法,比如说AJAX回调,回调函数的优点是简单易理解,缺点是代码不利于维护,耦合度高,会存在回调地狱的问题,而且每个任务只能指定一个回调函数
-
setTimeout:一个计时器,在对应指定时间之后再调用回调函数
-
promise:包装了一个异步调用并生成了一个promise实例,当异步调用返回结果的时候根据调用的结果分别调用实例化时传入的resolve 和 reject方法,then接收到对应的数据,做出相应的处理
-
generators/yield:Generator 函数是一个状态机,封装了多个内部状态,可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果
-
async/await:它们是基于promise封装的,在函数外面加上async就说明这是一个异步函数,返回的也是一个promise,await将异步代码改造成了同步代码,如果多个异步代码没有依赖性却使用了 await会导致性能上的降低,代码没有依赖性的话,完全可以使用 Promise.all 去写。