这是我参与「第五届青训营 」笔记创作活动的第10天。
一、重点内容
- let/const/var
- 原型
- 闭包
- promise-async-await异步编程
二、详细知识点介绍
let、const、var
let:有块级作用域,没有变量提升,不允许重复声明变量,可以不设置初始值,允许改变指针的指向(改变值)
const:有块级作用域,没有变量提升,不允许重复声明变量,必须设置初始值,不允许改变指针的指向(如果是const x=2,相当于x指向2所在的地址,数字2地址是不变的,也就是和定量一样了。如果是引用类型的数据,那么所指向的地址里存储的值改变,其值也就改变了。)
var:没有块级作用域,有变量提升,允许重复声明变量,可以不设置初始值,允许改变指针的指向(改变值)
原型-原型链
在 javascript 中,函数可以有属性。每个函数都有一个特殊的属性叫作原型(prototype)。
在原型链这种继承模型下,上游对象的方法不会复制到下游的对象实例中,但浏览器会通过上溯原型链、从上游对象中找到它们。(简单来说就是不是复制到子实例中,而是能够通过这个链来读。)
作用域链
在自己作用域内查找变量,若没有就向父级作用域查找,再没有就再继续向上查找,一直到window对象为止,这样一条链路就叫做作用域链。
闭包
闭包是有权利访问另一个函数作用域当中变量的函数。
闭包常用的两个用途:1.在外部调用闭包函数可以访问到函数内部变量,可以用来创建私有变量。2.保留已经结束函数上下文的变量不被销毁。
promise-async-await异步编程
promise是异步编程的一个很好的解决方案,解决了回调地狱。
promise是一个对象,它的实例有三种状态:
1.pending(进行中)
2.resolved(已完成)
3.rejected(已拒绝)
由于promise摆脱了回调地狱,但是多个promise组成的then链很麻烦,所以用async和await来进行优化。
async:用于声明一个函数是异步的。async函数返回的是一个promise对象。
await:用于等待一个异步方法执行完成。等返回的promise对象resolve,然后将resolve的值作为await表达式运算结果。
三、个人总结
我认为JS的学习需要层层递进,初期学习的时候可以不把底层的实现逻辑全部学习记住,主要在于能够做出效果让自己有一定积极性,但是到后面多少会对实现有好奇,这时候就适合对前面一些重点知识进行回顾,然后进一步学习JS高级的内容。