前端语言基本能力:HTML、css、JavaScript
JavaScript的六个基本类型:string、number、boolean、null、undefined、symbol
其他还有对象类型(object):array、function
浏览器
http=>构建dom书=>计算css树=>排版=>渲染合成=>绘制
JavaScript源码=>语法词法解析=>AST树=>通过ignition(转化成字节码=>在虚拟机如turbofan中运行=>机器码
css
内联在标签style=""
在头部head添加style标签
外部引用在头部head使用link链接
层叠三大规则
优先程度递减
- 样式表来源(!important>作者样式表即开发者写的>用户样式表>浏览器默认样式)
- 选择器优先级
内联>id>class>type
- 基础选择器 #ID选择器、.类选择器、*通用选择器、标签选择器
- 组合器 >子组合器(直接后代)、+相邻兄弟选择器、~通用兄弟组合器、复合选择器
- 属性选择器 (约束属性值)div[title="aa"]
- 伪类选择器:
- 伪元素选择器::
- 逻辑选择器 is()、:where()
- 源码位置(声明顺序
继承
大部分与文本相关的属性有继承特性,少部分是列表、表格、可以yoo那个月inherit关键字指定一个属性值从父元素继承
只有margin可以设置负值
布局
常规流(默认布局方式,块级(占满一行,从上到下)BFC表示盒子内部形成块级格式化上下文和内联(从左到右))、浮动流(横向布局)、定位流(自由定位、覆盖)
弹性盒子布局(1维)、网格布局(2维)、多列布局
层叠上下文之间(在用户可见的垂直屏幕的轴线上)存在顺序,('z-index>0'>inline文本>block)
z-index 在同一个层级比较,父元素永远大于子元素,z-index为auto,0不同,为0表示新建了一层
动画性能
布局(宽高位置改变,重新布局reflow)、绘制(填充像素、文本、着色、背景框,GPU重新绘制单独图层)、合成(收集所有绘制成的图层,按顺序显示)
- 尽量不触发reflow属性
- 遇到性能问题时触发硬件加速如will-change属性
- 尽量使用transform、opacity写动画
响应式设计推荐原则
- 优先使用流式布局
- 使用响应式图片
- 使用媒体查询
- 给移动端设备设置统一视口
- 使用相对长度
css预处理器
scss(可编程强)、less(易上手)、stylus
一般包含自定义变量、嵌套、作用域、mixins、继承、操作符、条件循环语句、自定义函数
JavaScript
- 单线程(比如GUI线程和JS线程互斥)
- 动态弱类型语言(即运行时才确定数据类型,变量无需在使用前申明类型)
- 面向对象(原型、继承、封装)、函数式(参数->结果,副作用、纯函数、jQuery、Ramda)
- 解释类语言,JIT
- 安全(局限于浏览器)、性能差 2015es6发布
1、浏览器 browser进程、GPU进程、渲染进程(GUI线程、JS线程、事件触发线程、定时器触发线程、网络线程)、插件进程、网络进程
2、数据类型{复杂数据类型存的是地址,赋值后原始值会被改变}
基础类型(字符串、undefined、数字、null、symbol、biglnt、布尔)
对象(数组、函数)
3、JS是静态作用域 ,目前拥有全局作用域,函数作用域,块级作用域
4、变量提升
var有变量提升,let和const没有
5、JS怎么执行
源代码通过(词法分析、语法分析)生成成AST抽象语法树和执行上下文(绑定this、创建词法环境如let、const、创建变量环境var),AST会转成字节码(这次转换用于节约内存),然后逐行解释执行成机器码,最后优化代码(热代码即多次执行的代码),编译执行机器码
6、闭包、this、垃圾回收
普通函数的this指向window, 对象调用,指向对象
微任务队列先于宏任务队列
HTML5 存储
cookies(人工设定存储时间) 、local storage (不存在过期时间)、session storage (关闭则清空)
IDB database(异步,对象存储,多种类型)