es6

作者: 小雨雪smile | 来源:发表于2018-05-21 22:35 被阅读32次

    箭头函数与普通函数的区别

    • 箭头函数是匿名函数,不能作为构造函数,不能使用new
    • 箭头函数不绑定arguments,取而代之用rest参数...解决
    • 箭头函数没有原型属性
    • 箭头函数不绑定this,会捕获其所在的上下文的this值,任何方法都改变不了其指向,call() 或 apply() 方法调用一个函数时,只传入了一个参数,对 this 并没有影响。
      普通函数中的this:
      1.this总是代表调用它的对象,例如obj.fun,那么fun中的this就是obj
      2.在非严格模式下,没有找到直接调用者,this指向的是window
      3.在严格模式下,没有找到直接调用者,this指向的是 undefined
      举个栗子
    var obj = {
      a: 10,
      b: () => {
        console.log(this.a); // undefined
        console.log(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
      },
      c: function() {
        console.log(this.a); // 10
        console.log(this); // {a: 10, b: ƒ, c: ƒ}
      }
    }
    obj.b(); 
    obj.c();
    
    var obj = {
      a: 10,
      b: function(){
        console.log(this.a); //10
      },
      c: function() {
         return ()=>{
               console.log(this.a); //10
         }
      }
    }
    obj.b(); 
    obj.c()();
    

    Promise的作用、原理

    Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合合理、强大。
    所谓Promise,简单来说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
    从语法上说,Promies是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。

    处理过程流程图:

    promise

    手写一个promise

    var promise = new Promise((resolve,reject) => {
        if (操作成功) {
            resolve(value)
        } else {
            reject(error)
        }
    })
    promise.then(function (value) {
        // success
    },function (value) {
        // failure
    })
    

    promise只有2个状态,成功和失败,怎么让一个函数无论成功还是失败都能被调用?

    使用promise.all()
    Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。
    Promise.all方法接受一个数组作为参数,数组里的元素都是Promise对象的实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)

    示例:

    var p =Promise.all([p1,p2,p3]);
    

    p的状态由p1、p2、p3决定,分为两种情况。
    当该数组里的所有Promise实例都进入Fulfilled状态:Promise.all返回的实例才会变成Fulfilled状态。并将Promise实例数组的所有返回值组成一个数组,传递给Promise.all返回实例的回调函数。
    当该数组里的某个Promise实例都进入Rejected状态:Promise.all返回的实例会立即变成Rejected状态。并将第一个rejected的实例返回值传递给Promise.all返回实例的回调函数。

    分析下列程序代码,得出运行结果,解释其原因

    const promise = new Promise((resolve, reject) => {
      console.log(1)
      resolve()
      console.log(2)
    })
    promise.then(() => {
      console.log(3)
    })
    console.log(4)
    

    运行结果:
    1 2 4 3
    原因:
    Promise 构造函数是同步执行的,promise.then 中的函数是异步执行的。

    相关文章

      网友评论

          本文标题:es6

          本文链接:https://www.haomeiwen.com/subject/wsqcjftx.html