美文网首页
Day6:JS进阶

Day6:JS进阶

作者: 知鱼君 | 来源:发表于2019-04-09 01:27 被阅读0次

原型

jquery和zepto如何使用原型(难)

异步

线程

为什么JS只能是一个线程?

  • 浏览器需要渲染DOM
  • JS可以修改DOM结构
  • JS执行的时候,浏览器DOM渲染会暂停
  • 两段JS也不能同时执行(都修改DOM就冲突了)

eventloop

  • 事件轮询,JS实现异步的具体解决方案
  • 同步代码,直接执行
  • 异步函数先放在 异步队列中
  • 待同步函数执行完毕,轮询执行 异步队列 的函数

jQuery的Deferred

  • 无法改变JS异步和单线程的本质
  • 只能从写法上杜绝callback这种形式
  • 它是一种语法糖形式,但是解耦了代码
  • 很好地体现:开放封闭原则(对扩展开放,对修改封闭)

promise

  • 异常捕获
  • 多个串联
  • promise.all和promise.race

promise标准

  • promise实例必须实现then这个方法
  • then()可以接收两个函数作为参数
  • then()返回的必须是一个promise实例

async/await

function loadImg(src) {
    const promise = new Promise(function(resolve, reject){
        var img = document.createElement('img')
        img.onload = function(){
            resolve(img)
        }
        img.onerror = function () {
            reject()
        }
        img.src = src
    })
    return promise
}

const src1 = 'http://xxx'
const src2 = 'http://xxx'

const load = async function () {
    const result1 = await loadImg(src1)
    console.log(result1)
    const result2 = await loadImg(src2)
    console.log(result2)
}
load()

  • 使用了Promise,并没有和promise冲突
  • 完全是同步的写法,再也没有回调函数
  • 但是:改变不了JS单线程、异步的本质

相关文章

网友评论

      本文标题:Day6:JS进阶

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