高级js进阶

ES6

开发环境中如何使用+重点语法掌握

  • es6模块化如何使用,开发环境如何打包
  • class和哦普通构造函数有何区别
  • promise的基本使用和原理
  • 总结一下es6其他常用功能
es6模块化如何使用,开发环境如何打包
  • 模块化的基本语法
  • 开发环境配置
  • 关于js众多模块化标准
    开发环境---babel

    开发环境---webpack

    关于js众多模块化标准

    模块化总结
class和普通构造函数的区别
  • js构造函数
  • class基本语法
  • 语法糖
  • 继承



    本质上类型还是function,没有类的概念,只是在模拟类。

继承-JS

class---总结

Promise的基本使用
es6其他常用功能

原型

  • 说一个原型的实际应用
  • 原型如何体现它的扩展性
    实际应用:
    1.zepto
    2.jquery
    3.自己想法扩充:①vue中的非父子组件传递(总线/bus/发布订阅/观察者模式 给vue的原型中添加bus监听。②js中引用对象的原型方法,如数组的slice可以被数组类型使用,是因为原型中有用到。③实现继承


异步

  • 什么是单线程,和异步有什么关系
  • 什么是event-loop
  • 是否用过jquery的deferred
  • promise的基本使用和原理
  • 介绍async/await(和promise的区别联系)
  • 总结当前js解决异步的方案
什么是单线程,和异步有什么关系
  • 单线程-只有一个线程,只能做一件事
  • 避免dom渲染的冲突
    ①浏览器需要渲染dom
    ②js可以修改dom结构(浏览器html渲染页面dom和js操作是同一个线程)
    ③js执行的时候,浏览器dom渲染会暂停
    ④两段js也不能同时执行(都修改dom会有冲突)
    ⑤webworker支持多线程,但是不能访问dom
  • 解决方案--异步
    ①问题一:没有按照书写方式执行,可读性差
    ②callback中不容易模块化
什么是event-loop
  • 事件轮询,js实现异步的具体解决方案
  • 同步代码,直接执行
  • 异步函数先放在异步队列中
  • 待同步函数执行完毕,轮询执行异步队列的函数
    总结
  • 事件轮询,js异步的解决方案
  • 什么是异步队列,何时被放入异步队列
  • 轮询的过程
jquery的deferred

(promise的前世)

  • jquery1.5的变化
  • 使用jquery的deferred
  • 初步引入promise概念,由deferred演化而来

jquery1.5之前


jquery1.5之后

链式操作

jquery1.5的变化

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



    修改后




    还有w.done() w.fail()


使用dtd.promise()

之前旧版本不会报错
总结

promise的基本使用和原理
  • 基本语法
  • 异常捕获
  • 多个串联
  • promise.all/promise.race
  • promise标准

通过.catch统一捕获所有的异常(error和reject),这样就不用在.then里再写入第二个函数捕获错误。让代码更加规范
多个串联
如果按照传统方式,浏览器会并行加载图片,不分先后顺序。


promise.all/promise.race

**关于“标准”的闲谈

promise标准
状态变化:
①三种状态:pending fulfilled rejected
②初始状态是pending
③状态不可逆
④只能pending---->fulfilled或者pending---->rejected
then:
①promise实例必须实现then方法
②then()必须可以接收两个函数作为参数
③then()返回的必须是一个promise实例
总结

介绍一下async/await(es7体验中,结合promise使用,替代then写法)
  • then只是将callback拆分了(本质还是callback)
  • async/await是最直接的同步写法
  • 语法
    ①使用await,函数必须用async标识
    ②await后面跟的是一个promise实例
    ③需要babel-polyfill(兼容)

    修改后
    如果按照传统写法,则图片是并行加载,不会按照顺序加载图片。
    同步写法,和then效果一致,如果函数中要用await,函数名前必须加上async。result接收resolve传入的参数。
    总结

    generrator不是为了解决异步而提出的,虽然也可以解决异步。既然解决异步有更简便的方案(promise+async/await)就不用太深入去了解generator(太复杂)

MVVM和Vue

  • 如何理解MVVM
  • 如何实现MVVM
  • 是否解读过vue的源码
    题目
  • 说一下使用jquery和使用框架的区别
  • 说一下对mvvm的理解
  • vue的响应式原理
  • vue的模板解析
  • vue的整个实现流程
说一下使用jquery和使用框架的区别
  • jquery实现todo-list
  • vue实现todo-list
  • jquery和vue区别
    两者区别
  • 数据和试图的分离(解耦,开放封闭原则,很重要这个原则!!)
  • 以数据驱动试图
    扩展开放,修改封闭
    (开放封闭原则--设计模式)
    学习去分析过程,怎么考虑,怎么对应到具体代码中!



    jquery数据和视图结合,操作了dom,设置数据,而并不是修改数据,让视图自动更新



而vue将数据和视图分离了,且做到了data对象中数据更新,视图自动更新,无需操作dom

MVC

MVVM

  • mvvm不算是一种创新
  • 但其中的viewmodel确实是一种创新
  • 真正结合前端场景应用的创建(借鉴后端的mvc)
mvvm框架(也就是vue)的三大要素
  • 再次分析demo
  • 三要素总结
    ①响应式:vue如何监听到data的每个属性变化?
    ②模板引擎:vue的模板如何被解析,指令如何处理?
    ③:vue的模板如何被渲染成html?以及渲染过程


vue中如何实现响应式
  • 什么是响应式
    ①修改data属性后,vue立刻监听到,渲染页面
    ②data属性被代理到vm上
  • Object.defineProperty
  • 模拟



    代理到vm的实现


vue中如何解析模板
  • 模板是什么
    ①本质:字符串
    ②有逻辑,如v-if,v-for等
    ③与html格式很像,但是有很大区别
    ④最终还要转换为html来显示
    ⑤模板最终必须转换为js代码,因为:
    有逻辑(v-for v-if 必须用js才能实现)
    转换为html渲染页面,必须用js才能实现
    因此,模板最终要转换为一个js函数(render函数)

  • render函数

  • render函数与vdom
    render函数---with用法


  • 模板中所有信息都包含在了render函数中

  • this即vm

  • price即this.price即vm.price,即data中的price

  • _c即this._c即vm._c



    不用太关心模板怎么生成对应的js(因为vue2.0已经有具体的工具自动生成,平时写的模板html标签,都会自动转换为js,工具化细节不用深究),只要清楚生成的js与模板的对应关系就行,主要目的是理解设计理念。



  • 那么模板如何生成html来渲染页面呢?

  • vm._c是什么?render函数返回了什么?
    vdom里的snabbdom---h函数


    render函数与h函数,返回的都是vnode

    render函数和vdom

    新旧vnode对比,prevnode保存上次的,vnode传入最新的。
    第一次执行时,没有旧的vnode,直接将vnode加入到el容器中。
    后面再执行时,就进行新旧对比。(就是之前vdom的用法)

    总结

  • 模板: 字符串,有逻辑,嵌入js变量

  • 模板必须转换为js代码(有逻辑,需然然html,js变量)

  • render函数是什么样的

  • render函数执行返回vnode

  • updateCoponent

vue的三大要素总结

第一步:解析模板生成render函数

  • with的用法
  • 模板中的所有信息都被render函数包含
  • 模板中用到的data中的属性,都变成了js变量
  • 模板中的v-model v-for v-on都变成了js逻辑
  • render函数返回vnode
    第二步:响应式开始监听
  • Object.defineProperty
  • 将data的属性代理到vm上(这样render函数中的js逻辑与js变量才能获取到)
    第三步:首次渲染,显示页面,且绑定依赖
  • 初次渲染,执行updateComponent,执行vm._render()
  • 执行render函数,会访问到vm.list和vm.title
  • 会被响应式的get方法监听到
  • 执行updateComponent,会走到vdom的patch方法
    *patch将vnode渲染成dom,初次渲染完成
  • 为何要监听get?直接监听set不行吗?
    ①data中有很多属性,有些被用到,有些可能不被用到
    ②被用到的会走get,不被用到的不会走get
    ③没有走到get中的属性,set的时候也不需要关心
    ④避免不必要的重复渲染
    第四步:data属性变化
  • 修改属性,被响应式的set监听到
  • set中执行updateComponent
  • updateComponent重新执行vm._render()
  • 生成的vnode和
    preVnode,通过patch进行对比
  • 渲染到html中


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 一、Javascript实现异步编程的过程以及原理 1、为什么要用Javascript异步编程 众所周知,Java...
    Ebony_7c03阅读 848评论 0 2
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 1,956评论 0 4
  • 本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, ...
    牧云云阅读 1,675评论 0 3
  • JavaScript执行机制,重点有两点: 1.JavaScript是一门单线程语言。2.Event Loop(事...
    小泡_08f5阅读 11,743评论 2 22
  • 单线程 JavaScript是一门单线程的语言,被广泛应用于浏览器和页面DOM元素交互,自从Node.js出现后,...
    JunChow520阅读 796评论 0 3