Promise的理解与使用

promise对象有两个特点:

(1)对象的状态不受外界外界影响.promise对象代表一个异步操作,有三种状态;pending(进行中),fulfilled(已成功)和rejected(已失败).只有异步操作的结果,可以决定当前是哪一种状态;

(2)一旦状态改变,就不会再改变,任何时候都可以得到这个结果.promise的状态改变,只有两种可能:从pending变为fulfilled和从pending变成rejected.只要这两种状态情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为resolved(已定型);

基本用法

new Promise( /* executor */ function(resolve, reject) { ... } ) 

promise接受一个函数作为参数,该函数的两个参数分别是resolve和reject.它们是两个函数,由JavaScript引擎提供,不用自己部署;

then方法

Promise实例具有then方法,也就是说,then方法是定义在原型对Promise.prototype上的,它的作用是是为Promise实例添加状态改变时的回调函数.then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数.并且then方法返回的是一个新的Promise实例;

闭包的理解与使用

作用域相关

我把闭包和作用域放在一起理解.要理解闭包,首先要理解变量作用域.变量的的作用域无非就是两种:全局变量和局部变量.JavaScript的特殊之处就在于函数内部可以直接读取全局变量;

var n=999; 
  function f1(){ 
    alert(n); 
  } 
  f1(); // 999 
  另一方面,在函数外部自然无法读取函数内的局部变量. 
  function f1(){ 
    var n=999; 
  } 
  alert(n); // error

处于种种原因,我们有时候需要得到函数内的局部变量.但是,正常情况下,这是办不到的,只有通过变通方法才能实现.在函数内部,再定义一个函数:

  function f1(){ 
    var n=999; 
    function f2(){ 
      alert(n); // 999 
    } 
    return f2; 
  } 
  var result=f1(); 
  result(); // 999 

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。所以本质上,闭包就是将函数内部和函数外部连接起来一座桥梁;

你可能感兴趣的:(js)