# HTML

# CSS

# 前端常见的数值单位

  • px:绝对单位,页面按精确像素展示。
  • em:相对单位,按自身的 font-size 计算
  • rem:相对单位,相对根节点的字体大小来计算
  • vw:viewpoint width,视窗宽度,1vw 等于视窗宽度的 1%。
  • vh:viewpoint height,视窗高度,1vh 等于视窗高度的 1%。
  • vmin:vw 和 vh 中较小的那个。
  • vmax:vw 和 vh 中较大的那个。
  • %: 百分比

# display: none, visibility: hidden, opacity: 0 的区别

在 DOM 树中的处理是否占据空间是否可以点击性能对后代的影响
display: none从树中移除不占空间不能触发回流全部不能显示
visibility: hidden不从树中移除占据空间不能触发重绘可以设置 visibility 为 visible 来显示
opacity: 0不从树中移除占据空间可以触发 GPU 硬件加速全部不能显示

回流和重绘

# css 居中总结

https://www.sakura-snow.com/archives/615

# JavaScript

# let 和 Var 的区别

  • let 是块作用域,var 是函数作用域
  • let 不会挂载到全局对象上
  • 不允许在当前作用域内重复声明,不允许在定义前调用

底层实现上,let 声明的变量实际上也会有提升,但是,提升后会将其放入到 “暂时性死区”,如果访问的变量位于暂时性死区,则会报错:“Cannot access 'a' before initialization”。当代码运行到该变量的声明语句时,会将其从暂时性死区中移除。

在循环中,用 let 声明的循环变量,会特殊处理,每次进入循环体,都会开启一个新的作用域,并且将循环变量绑定到该作用域(每次循环,使用的是一个全新的循环变量)

在循环中使用 let 声明的循环变量,在循环结束后会销毁

# 箭头函数和普通函数的区别

  • 箭头函数的 this 永远指向定义时外层环境的 this
  • 箭头函数不能作为构造函数
  • 箭头函数没有 arguments 参数
  • 箭头函数没有 prototype
  • 箭头函数不能用作 Generator 函数

# Vue

# Vue 生命周期

生命周期钩子组件状态最佳实践
beforeCreate实例初始化之后,this 指向创建的实例,不能访问到 data、computed、watch、methods 上的方法和数据常用于初始化非响应式变量
created实例创建完成,可访问 data、props、computed、watch、methods 上的方法和数据,provide 和 inject 的数据也可以进行访问,未挂载到 DOM,不能访问到el属性,el属性,ref 属性内容为空数组常用于简单的 ajax 请求,页面的初始化
beforeMount在挂载开始之前被调用
mounted实例挂载到 DOM 上,此时可以访问 $el, $ref 属性常用于需要 DOM 参与的操作和 ajax 请求
beforeupdate响应式数据更新时调用,发生在准备更新 DOM 前适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器
updated虚拟 DOM 重新渲染和打补丁之后调用,组件 DOM 已经更新,可执行依赖于 DOM 的操作避免在这个钩子函数中操作数据,可能陷入死循环
beforeDestroy实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例常用于销毁定时器、解绑全局事件、销毁插件对象等操作
destroyed实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁-

# React

# webpack

# 其他