前端语言串讲 | 青训营笔记

60 阅读4分钟

前端语言基本能力: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关键字指定一个属性值从父元素继承

c1f2a6b7b317bac09afc53c09144d65.png 只有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、继承、操作符、条件循环语句、自定义函数 1aa4525fb8657baf011f6d9ed5b0436.png

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(异步,对象存储,多种类型)

df3697b2764534caf806151a728ad0c.png