Promise的原理和作用域的用法和实例
Promise是一种异步编程的解决方案,它可以让我们更方便地处理异步操作,避免了回调地狱的问题。Promise的核心思想是将异步操作封装成一个对象,通过链式调用的方式来处理异步操作的结果。
Promise状态
状态有三种分别是 pending(进行中) fulfilled(已成功) rejected(已失败)
pending:初始状态,既不代表成功也不代表失败,无论是失败还是成功都会执行
let b=0functiongetCount(){
            returnnewPromise((resolve, reject) =>{
                setTimeout(()=>{
                    b=300resolve(b) 
                },1000)
            })
        }
        console.log(getCount()); 
let a=0functiongetNumber(){
            returnnewPromise((resolve, reject) =>{
                setTimeout(()=>{
                    a=30reject(a) 
                })
            })
        }
        console.log(getNumber()); 
Promise方法
静态方法:solve() ject()
1.solve()函数被执行时, 会将promise的状态从 pending 改成fulfilled成功
2.ject()函数被执行时, 会将promise的状态从pending 改成rejected失败
    new Promisepending((resolve, reject) =>{
   
        resolve() reject()
       
    })
3.Promise.all()函数执行时,返回所有的promise
Promise.all([getCount(),getNumber()]).then(res=>{
        console.log(res);
    }).catch(err=>{
        console.log(err);
    })
4.Promise.race()函数执行时,返回执行最快的Promise
  Promise.race([getCount(),getNumber()]).then(res=>{
        console.log(res)
  }).catch(err=>{
        console.log(err)
  })
作用域
作用域分为全局作用域,函数作用域(局部作用域) 自动全局作用域
全局作用域
1直接写在 script 标签中的 JavaScript 代码都是全局作用域。当页面打开运行时全局作用域就会自动创建,而当页面关闭时就会销毁。在全局作用域中有一个全局的 window 对象可以使用,而所有全局作用域对象都会作为 window 对象的属性来使用。
console.log(window);
    var a = 10;
    console.log(window.a); functionaa() {
        console.log('aa')
    }
    window.aa();
    var aaa = {
        name: '张三'
    }
    console.log(window.aaa.name); 
函数作用域
作用于函数的代码环境是局部范围。因为和函数有关,所以也叫函数作用域。局部作用域(函数作用域)只在函数被调用时创建,函数执行后自动销毁。同时,每次调用一个函数,都会创建一个新的函数作用域,它们是相互独立的。在函数作用域中可以访问全局作用域,但在全局作用域中不能访问函数作用域。当一个变量在函数作用域中使用时,它会先在自己的作用域中查,如果到就直接使用,如果不到就在上级作用域中查,直到到全局作用域。如果没有到,将会报告一个错误。
var age = 18;
    functionfn() {
        var age = 20;
        console.log(age); console.log(this.age); console.log(window.age);
    }
    window.fn();
自动全局作用域
如果没有声名变量赋值,这变量会自动成为全局变量
  function fn() {
        age = 19;
        console.log(age); 
    }
    fn();
    console.log(window);
    console.log(age);