es6

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

  • 箭头函数是匿名函数,不能作为构造函数,不能使用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)