面经梳理@小米-2019-05-31

241 阅读3分钟

1.react如何绑定this

react为什么要绑定this

在react组件中,每个方法的上下文都会指向该组件的实例,即自动绑定this为当前组件,而且react还会对这种引用进行缓存,以达到CPU和内存的最大化。在使用es6 class或者纯函数时,这种自动绑定就不复存在了。


  • bind()方法:每一次渲染都会重新绑定一次
  • 在构造函数(constructor())中绑定:只需绑定一次,且函数在别处复用时也不用重新绑定
  • 箭头函数:不仅是函数的“语法糖”,还自动绑定了定义此函数作用域的this

2. flex布局

3.内联元素&&块级元素

  1. 常用的内联元素

2. 常用的块级元素
在H5中< header>< nav>< footer>< article>< section>等其实就是
< div>,只是为了更好的划分文档的逻辑关系

3. 可变元素(根据上下文关系)

  1. 标准文档流中的区别
  • 块级元素
    • 占据一整行
    • height\line-height\padding\margin都可调
    • 宽度始终与浏览器宽度一样,与内容无关
    • 可包裹内联元素(块级元素)
  • 内联元素
    • 在一行上排列
    • height\line-height\padding\margin部分可调
    • 宽度只与内容有关
    • 只能包裹文本(行内元素)
      注: 不可设置宽高,宽度随内容改变,高度随字体改变。外边界只对左右有效,内边界在ie6中只对左右有效
  1. 改变元素类型
  • display: block //显示为块级
  • display: inline //显示为内联
  • display: inlnie-block //显示为内联,表现为同行显示并可修改宽高内外边距等属性

4.图片没加载之前先用一个背景图代替

  1. 图片懒加载
  2. 实现方法:
  • 页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片(提高性能)
  • 将真正的路径存放于元素"data-url"中

5.事件委托(事件代理)

  1. 定义: 利用事件冒泡,只制定一个时间处理程序,就可以管理某一类的所有事件。
  2. 背景:
  • 程序中现有的dom节点是有事件的
  • 程序中新添加的dom节点也是有事件的
  1. 为什么使用
  • 减少dom节点进行交互,导致浏览器重绘重排次数
  • 方便动态添加和修改元素
  1. 原理: -利用事件冒泡原理实现:事件从最深节点开始,逐步向上传播事件,委托他们的父级代为执行事件
  2. 事件冒泡及捕获
  • 事件处理流程: 事件捕获阶段 -> 事件目标阶段 -> 事件冒泡阶段
  • 事件捕获:当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。
  • 事件目标: 当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。
  • 事件冒泡: 从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被触发。

6.fetch封装后怎么捕捉错误

  1. fetch请求对某些错误http状态不会reject(会进行封装)
  • fetch返回promise导致的,因为返回的promise在某些错误的http状态下如:400、500等不会reject,相反他会被resolve
  • 只有网络错误会导致请求不能完成时,fetch才会被reject