vue基本语法

VUE day01

异步函数和回调函数

何为异步函数:不会马上执行,需要特定的时机执行的函数,由于是异步的,不会阻塞主线程代码的执行

异步函数有哪些:ajax请求,定时器,延时器,文件读取

何为回调函数:把一个函数当作参数传递,将来特定的时机调用,这个函数就是回调函数,一般异步操作,都会用到回调函数

例如:setTimeout(()=>{ console.log(2)},1000)==>定时器里面的打印2不会立刻执行,会等1秒后打印2

回调函数的缺点:1.回调函数不会立刻被执行,阅读性不好2.回调函数一旦大量嵌套,可维护性差,回调函数嵌套过多,维护起来会有一种在地狱的感觉,所以就有了回调地狱这个问题

怎么解决回调地狱的问题:利用promise来解决

promise (承诺:可能成功,可能失败)

promise对象用于表示一个异步操作的最终完成 (或失败)及其结果值

promise的基本语法:1.创建一个promise对象 2.使用promise对象

创建:const p=new Promise((resolve,reject)=>{})

使用:p.then().catch();

注意:其中resolve和reject 是promise 内部提供的两个函数

在promise中,一般封装的是将来的事情,封装的异步操作(如ajax,fs.readFile)

resolve函数,需要在成功的时候,调用

reject函数,需要在失败的时候,调用

例子:

import fs from "fs"

const p=new Promise((resolve,reject)=>{

//封装一个异步操作,有成功或者失败,如果xx.xx的文件内容很大,

fs.readFile("xx.xx","utf-8",(err,data)=>{

if(err) {reject(err)}else{resolve(data)}

})

})

console.log(p) //pending

p.then(data=>{console.log("成功了“,data) console.log(p) // fulfilled}).catch((err)=>{console.log("失败了",err) console.log(p)//rejected})

promise的三个状态:1.pending :等待(进行中) 默认的状态,比如我们发ajax,还没返回响应的时候,就是等待状态2.fulfilled或者resolved:成功(已完成),调用了resolve函数,就把等待的状态改变为成功,调用rejectd函数,就把等待的状态改变为失败,promise的状态一旦改变,就不能再更改,我们称为状态凝固

promise支持链式编程:如果上一个.then()函数中返回一个新的promise对象,则可以交给下一个.then()继续处理,在Promise的链式操作中如果发生了错误,可以使用.catch方法进行捕获和处理,一般放在最后一个.then()后面

promise常用的静态方法:Promise.all()和Promise.race()

Promise.all() 等待机制:语法:Promise.all([promise1,promise2,,,])

特征:发起并行的promise异步操作,会等待所有的异步操作完成,才会执行.then((values)=>{})方法,使用场景--首页渲染=》渲染导航,渲染轮播,渲染商品展示,需要同时发请求,加载的时候loading 就可以使用.all()方法

Promise.race() 竞赛机制:

语法:Promise.race([promise1,promise2,,,]).then((value)=>{})

特征:发起并行的Promise异步操作,只要任何一个异步操作完成,就会执行.then()方法

async 和await

首页:他们是一对关键字,谁也离不开谁,async必须有awiat才有异步的效果,一个async异步函数里面可以有多个awiat,但是没有就不能达到异步的效果,他们被设计出来是为了优化Promise解决回调地狱,多层嵌套的问题,链式结构太长,可维护性不是最好的,所以就有了它们,await后面一般跟个promise对象,会阻塞async函数的执行,直到等到promise成功的结果,及reslove()的结果,因为awiat只会等待promise成功的结果,如果是失败的,会报错,所以就需要try{}.catch((err)=>{})一下,捕获错误信息

事件循环机制:

js是单线程执行的编程语言,这是由它自身的机制决定的,也就是说同一时间只能做一件事,执行代码时,会自上而下一行一行去执行,但是纯粹的单线程,遇到很费时的任务时,下面的代码不得不等待,这样会造成浏览器假死这种状态,为了避免出现这种情况,js会把这些耗费时间的异步任务,交给浏览器去监听,如果满足条件需要执行,浏览器会把该执行的异步任务放到任务队列里面,直到主线程上的任务执行完毕时,它会去看看任务队列里面有哪些事件需要去执行,然后推入到执行栈中执行,这样重复执行,就是我们所说的事件循环机制。(任务队列里面和浏览器里面任务都会排队)

宏任务:

主线程的代码,延时器,定时器内的代码,都是宏任务

特征:一个宏任务结束才会考虑执行下一个宏任务

微任务

promise的.then().catch()方法属于微任务

特征:当前宏任务结束,下一个宏任务开始之前

图形演示:

 

 

 

ES6模块化:

默认导入导出:

默认导入:import 变量名 from "模块标识"

默认导出:export default 值

按需导入导出:

按需导入:import {变量名1,,,} from "模块标识"

按需导出:export const a=1;

tip:可以修改结束的变量名 利用关键字as 解决变量名冲突问题

直接导入并执行:

语法:import "模块标识"

VUE day02

yarn:包管理工具

特点:跟npm的作用相同,都是包管理工具

优点:比npm更稳定,更快,安全的依赖管理工具

使用:方法1:下载安装,方法2:使用

你可能感兴趣的:(vue)