最近遇到的问题2

372 阅读3分钟

闭包

闭包就是一个能读取另外一个函数内部变量的函数。
构造方法:在一个函数的内部定义另一个函数。内部函数可以引用外部函数内的变量。
PS:在外层函数return里面的那个函数是为了让里面这个函数能够被使用,这个return跟闭包无关。 优点:避免全局变量被污染 缺点:内存消耗大

this

this最终指向的是调用它的对象
普通对象调用this:指向global或window
构造函数调用this:指向当前new出来的实例对象
箭头函数调用this:指向上下文中的this指向的对象
对象调用this:指向当前对象 call/apply/bind调用this:指向它的第一个参数,也就是当前对象

Ajax

Ajax=异步的JS和XML
Ajax可以实现网站的异步更新,是一种能让网页实现部分更新的技术
工作原理:首先是通过XMLHttpRequest对象来向浏览器发送异步请求,然后浏览器就会从服务器端获取数据,最后通过JavaScript来操作DOM,从而实现网页的异步更新 使用步骤:

  1. 创建XmlHttpRequest对象const request = new XmlHttpRequest()
  2. 设置请求方式:GET还是POST,true还是false(设置是否为异步请求)request.open("GET","a/b/c?name=ff",true)
  3. 调用回调函数request.onreadystatechange=function(){}
  4. 向服务器发送请求request.send()

手写Ajax:

const request=new XmlHttpRequest()
request.open("GET","a/b/c?name=ff",true)
request.onreadystatechange=function(){
    if(request.readyState===4 && request.status===200){
        console.log(request.responseText)
    }
}
request.send()

Promise

Promise是一种异步编程的解决方案,主要是用于解决JS异步里回调机制所产生的回调地狱的问题。
Promise封装了异步回调机制,让异步回调的可读性更强,且可以链式调用。
Promise的三个状态resolved成功,pending进行中,rejected失败

常用API:

  1. Promise.prototype.then():then方法为Promise注册回调函数,且一定要return一个结果或者是一个新的Promise才能实现链式调用。then接受两个回调函数作为参数,一个是Promise执行成功后执行的函数,一个是Promise执行失败后执行的函数。函数形式:function(value){} ,其中value是上一个任务执行的结果。
  2. Promise.prototype.catch():catch方法用于捕获异常。函数形式function(error){}。一般来说,写then方法时不要写第二个参数(即rejected状态的回调函数),而是在后面用catch捕获错误,原因是这样就可以把前面then的错误也捕获到。由于catch方法返回的还是一个新的Promise对象,所以后面还可以接着then方法继续链式调用。
    Promise.then(function(value){},function(error){})
        //改写成 ↓
    Promise.then(function(value){}).catch(function(error){})
    
  3. Promise.race():多个Promise同时进行,race方法返回最先执行完的Promise的结果(不管是执行成功还是失败)
    Prmise.race([promise1,promise2]).then(success1,fail1) 
    //只要有一个promise成功就执行success1
    
  4. Promise.all():多个Promise同时进行,all方法以数组的形式返回所有Promise的结果。如果有一个Promise执行失败,则返回执行失败的Prmoise的结果。
    Prmise.all([promise1,promise2]).then(success1,fail1) 
    //两个promise都成功才执行success1