常用的es6

1.箭头函数

普通函数取决于谁调用它,它的this就指向谁,并不是固定的(普通函数this指向取决于调用)

//简写注意

1.如果有且仅有一个参数,()可以不写

2.如果有且仅有一个语句并且是return,{}可以不写

箭头函数的this指向由它所在的执行上下文中的this所改变 也可以说是外层函数 说执行上下文其实更体现出 箭头函数的this是在外层函数执行前一刻所得知的 而这个外层函数的this又是取决于怎么调用他的 所以箭头函数的this虽然不能直接变更 但是可以间接通过改变外层函数的this来改变箭头函数的this call或apply bind都可以改变外层函数this指向(箭头函数this指向取决于定义)

var fun1 = function() {

      console.log(this);

    };

    var fun2 = () => console.log(this);

    // setTimeout(fun2,100);

    document.onclick = fun2;

    fun1.call(1);

    fun1();

2.变量和常量(let const)

1.不可重复声明

let和const有效解决了var可重复声明带来的问题,let和const不可重复声明

2.控制修改

let是变量可修改,const不可修改,是定义的常量

3.作用域

var声明的是函数级作用域(在if或者for循环中声明的变量会泄露成全局变量,内层变量可能会覆盖外层变量)

let是块级作用域(花括号内有效,超出当前花括号就是未定义)

3.解构赋值

  // let {a,b} = {a:11,b:12}

  // console.log(a);

  // let [c,d] = [0,1]

  // console.log(c);

  //注意事项

  //1.两边解构要相同

  // let {a,b} = [12,5]

  // console.log(a);

  //2.右边必须得是正确的数据类型

  // let {a,b} = {11,12}

  // console.log(a);

  //3.解构和赋值要同时完成

  // let {a,b};

  // {a,b} = {a:11,b:12}

  // console.log(a);

4.剩余参数

 //剩余参数必须放在后面,是最后一个参数(1.收集2.展开)

```

  let show = (a,b,...c) =>{

    console.log(a,b,c)

  }

  show(1,2,3,4,5);//输出1 2 (3) [3, 4, 5](收集剩余的传值到最后一个参数)

  let arr1 = [1,2,3];

  let arr2 = [4,5,6];

  let arr = [...arr1,...arr2];

  console.log(arr)//输出(6) [1, 2, 3, 4, 5, 6](把数组展开了)

  let json = {a:1,b:2}

  let json1 = {

    ...json,

    d:999

  }

  console.log(json1)//输出{a: 1, b: 2, d: 999}

```

5.原生对象扩展

1.map 映射(一一对应)

  let arr= [66,88,99,12,60];

  let arr1 = arr.map(item => item>60?'及格':'不及格');

  console.log(arr1);//输出["及格", "及格", "及格", "不及格", "不及格"]

2.reduce 缩减

let arr= [66,88,99,12,60];

  let result = arr.reduce((tmp,item,index) => {//tmp表示上一次调用回调返回的值,或者是提供的初始值,也就是return的值,item当前要被处理的值,index当前处理值的下标

    console.log(tmp+'----'+item+'------'+index);

    //0----66------0

    // 66----88------1

    // 154----99------2

    // 253----12------3

    // 265----60------4

    return tmp+item;

  },0)//注意这里设置了初始值,如果不设置初始值index会跳过第一个索引

  console.log(result);//输出325

3.filter 过滤

let arr= [66,88,99,12,60];

 let arr1 = arr.filter(item => {

    if(item>60){

      return true;

    }

  })

  console.log(arr1);//输出[66, 88, 99]

4.forEach 遍历

  let arr= [66,88,99,12,60];

  arr.forEach((item, index) => {

    console.log(`数组的第${index}个值是${item}`)//字符串模板

  })

6.Promise

1.回调函数概念

同步回调

定义:立即执行,,完全执行完了才结束,不会放入回调队列中

举例:数组遍历相关的回调 / Promise的excutor函数

异步回调

不会立即执行,会放到回调队列中将来执行

举例:定时器回调 / ajax回调 / Promise成功或失败的回调

2.Promise的理解

1.Promise是JS进行异步编程的解决方案,语法上来说它是一个构造函数,功能上来说Promise对象用来封装一个异步操作并可以获取其结果

2.Promise有三种状态(初始pending 成功resolved 失败rejected),且一个promise对象只能改变一次,无论成功还是失败,都会有一个结果数据,成功的结果数据一般称之为value,失败的结果数据一般称之为reason

3.Promise的基本流程是


then返回一个新的 promise

4.promise的基本使用


5.为什么要使用promise,

5.1指定回调函数的方式更加灵活,不管在异步任务开始前后还是异步任务取得结果前后指定回调函数

5.2.支持链式调用,可以解决回调地狱问题

5.3.多个串联的异步操作,就会出现回调地狱,通常还以上个回调函数的结果进行处理,回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件

6.怎么使用promise

6.1->

Promise 构造函数:Promise(excutor) {}

excutor 函数:同步执行 (resolve, reject) => {}

resolve 函数:内部定义成功时调用的函数 value => {}

resolve 函数:内部定义失败时调用的函数 reason => {}

说明:excutor 是执行器,会在 Promise 内部立即同步回调,异步操作 resolve/reject 则在 excutor 中执行 Promise.prototype.then 方法:(onResolved, onRejected) => {}

6.2->

onResolved 函数:成功的回调函数 (value) => {}

onRejected 函数:失败的回调函数 (reason) => {}

说明:指定用于得到成功 value 的成功回调和用于得到失败 reason 的失败回调返回一个新的 promise 对象

6.3->

Promise.prototype.catch 方法:(onRejected) => {}

onRejected 函数:失败的回调函数 (reason) => {}

说明:then()的语法糖,相当于 then(undefined, onRejected)

6.4->

Promise.resolve 方法:(value) => {}

value:成功的数据或 promise 对象

说明:返回一个成功/失败的 promise 对象

6.5->

Promise.reject 方法:(reason) => {}

reason:失败的原因

说明:返回一个失败的 promise 对象

6.6->

Promise.all 方法:(promises) => {}

promises:包含 n 个 promise 的数组

说明:返回一个新的 promise,只有所有的 promise 都成功才成功,只要有一个失败了就直接失败

6.7->

Promise.race方法:(Promises) => {}

promises:包含 n 个 promise 的数组

说明:返回一个新的 promise,第一个完成的 promise 的结果状态就是最终的结果状态

7.Promise的几个关键问题

    7.1.如何改变promise的值

    内部定义成功或者失败时调用的resolve或reject可以改变promise的状态

    抛出异常:throw new Error()promise的状态变为rejected

    7.2 一个promise指定多个成功/失败的回调函数都会调用吗?

    当promise改变为对应状态时都会被调用

    7.3.promise.then() 返回的新 promise 的结果状态由什么决定

    简单表达:由 then() 指定的回调函数执行的结果决定

    ① 如果抛出异常,新 promise 变为 rejected,reason 为抛出的异常(throw new Error())

​     ② 如果返回的是非 promise 的任意值,新 promise 变为 resolved,value 为返回的值(return 2)

​     ③ 如果返回的是另一个新 promise,此 promise 的结果就会成为新 promise 的结果(return Promise.resolve(3)或者return Promise.reject(4))

    7.4.promise的异常穿透是什么情况

    当使用了promise的then()链式调用时,不管中间有多少个then(),都可以在链式最后使用catch()回调,只要前面的任何操作出现了异常,都会传到最后失败的catch()回调中处理

    7.5如何中断promise链

    当使用 promise 的 then 链式调用时,在中间中断,不再调用后面的回调函数可以在回调函数中返回一个 pending 状态的 promise 对象(return newPromise(()=>{})// 返回一个pending的promise)

8.JS异步之宏队列与微队列


8.1 JS 中用来存储待执行回调函数的队列包含2个不同特定的队列

8.2 宏队列:用来保存待执行的宏任务(回调),比如:定时器回调/DOM 时间回调/ajax 回调

8.3 微队列:用来保存待执行的微任务(回调),比如:promise 的回调/MutationObserver 的回调

8.4 JS 执行时会区别这2个队列

    JS 引擎首先必须执行所有的初始化同步任务代码

    每次准备取出第一个宏任务前,都要将所有的微任务一个一个取出来执行

7.async/await

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351