前端基础回顾-2-简单知识点
这是前端基础回顾的第二篇,记录一下一些简单的知识点,仅仅用于速记,详细的还是查看具体的一些文章吧。
开始
HTML
-
从浏览器地址栏输入 url 到请求返回发生了什么
url解析、缓存、dns解析、tcp链接、http请求、响应、渲染。 -
三次握手、四次挥手
- 三次握手
客户端:我要发送
服务端:接收到客户端信息
客户端:接收到服务端信息 - 四次挥手
客户端:我要关闭
服务端:接收到客户端信息
服务端:发送关闭信息
客户端:接收到关闭信息
- 三次握手
-
浏览器内容解析
dom树
css树
render树
布局计算
渲染 -
http缓存
- 强缓存
- cache-control: max-age=xxx(最大时间s)
- 协商缓存
- last-modified -> if-modified-since
- etag -> if-none-match
- 强缓存
-
get和post的区别
- get可以缓存
- get在url上
- get明文传输,不安全
- get一次性传输,post需要两次
-
跨域
- 同源策略
域名(baidu.com) 协议(http) 端口(80) - 简单请求
- get post head
- headers只有
Accept
、Accept-Language
、Content-Language
、Content-Type(application/x-www-form-urlencoded或者multipart/form-data或者text/plain)
- 请求中直接带
Origin: 192.168.x.x
响应带
Access-Control-Allow-Origin: 192.168.x.x
允许的域名
Access-Control-Allow-Credential: true
允许携带cookie
Access-Control-Allow-Headers
允许携带的headers
Access-Control-Allow-Method
允许请求的方法
- 非简单请求
options
请求预查- 响应带
Access-Control-Max-Age: xxx
options缓存有效时间,时间内允许直接发送正式请求
- 解决办法
- 代理服务器,同源服务器代理客户端请求
- nginx
正向代理
配置Access-Control-Allow-Origin: xxx
- webpack
- 同源策略
-
常用meta
1 |
|
CSS
-
盒模型
box = content + padding + border + margin
- 标准盒模型(box-sizing: content-box)
width = content
- 怪异盒模型(box-sizing: border-box)
width = content + padding + border
- 标准盒模型(box-sizing: content-box)
-
优先级
!important > 内联 > id > class > tag
优先级 = (A, B, C, D)- A
内联,!important - B
#id - C
.class a[href=“http://”] :after - D
div ::after
- A
-
样式属性继承
样式可被继承到子元素,比如font-size
、font-weight
、color
等 -
margin
重叠
垂直方向发生重叠- 相邻兄弟元素
margin-top[bottom]
重叠
解决:设置BFC
- 父
margin-top
和子margin-top
重叠
解决:设置父padding
或border
- 父高度
auto
的margin-bottom
和子margin-bottom
重叠
解决:设置父高度 - 本身无高度,上下
margin
重叠
解决:设置padding
或border
计算:
Math.max(+, +)
Math.abs(+ - Math.abs(-))
-Math.abs(Math.abs(-) - Math.abs(-))
- 相邻兄弟元素
-
设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别
- 设备像素
物理像素,不可变 - css像素
css像素=设备独立像素,相对单位,相对于设备像素 - dpr
dpr = 设备像素 / 设备独立像素
缩放会改变dpr
- ppi
每英寸的物理像素密度,密度越大,分辨率越大
- 设备像素
-
精灵图
合并图片,利用background-
加载各个位置的小图
优点:- 减少
http
请求 - 提高压缩比
缺点: - 动一图改全图
- 减少
-
rem
优缺点
优点:- 屏幕适配
缺点: - 有些不同
dpr
设备显示错误 iframe
显示错误
ps:
1
2
3
4
5
6
7!function() {
function resize(){
document.documentElement.style.fontSize = window.innerWidth / 540 /*设计稿的宽度*/ * 10 /*1rem = 10px*/ + "px"
};
resize()
window.addEventListener("resize", resize)
}() - 屏幕适配
-
margin
无效- 内联元素无效
- 内联替换元素垂直有效,无合并问题
dispaly
的table-row
和table-cell
无效- 定高容器的子元素的
margin-bottom
和定宽容器的子元素的margin-right
无效
-
min-width
、max-width
、width
关系
min-width > max-width > width
-
line-height
数值、百分比、长度
继承:
数值直接继承
百分比和长度为计算后继承 -
text-indent
inline
和替换元素无效
百分比相对包含块宽度 -
letter-spacing
字符间距
不支持百分比
支持负值
默认值normal
hello world -
word-spacing
文件间空格间距hello world -
文本省略
-
元素隐藏
display: none
opacity: 0
visibility: hidden
z-index: -1
-
重排和重绘
- 重排
页面元素重新计算排列布局 - 重绘
页面元素重新渲染
重排比重绘更消耗性能
- 避免
- 统一修改样式
- 临时存储需要计算的尺寸位置属性
- 统一增删改dom元素
- position脱离文档流
- transform GPU 加速
- 重排
-
BFC
用于绝对块极盒子的布局以及浮动相互影响的区域。- 块极盒子垂直方向排列
- BFC内元素的上下
margin
会重叠 - BFC计算高度时,浮动元素也会参与计算
- BFC不会与浮动元素发生重叠
- BFC外部元素不会影响到内部
- BFC内部元素的左
margin
和border
接触
创建BFC
- position: absolute fixed
- display: inline-block
- overflow: 不为visible
Javascript
-
基本数据类型
null
、undefined
、number
、boolean
、string
、object
、bigint
、symbol
-
数据类型判断
- typeof
只能判断普通类型,引用类型无法判断 - instanceof
只能判断引用类型,无法区分继承的原型属性 - Object.prototype.toString.call
可以判断所有类型
- typeof
-
作用域和作用域链
规定如何查找变量
从当前作用域不断向上寻找变量,直至到全局。 -
执行上下文
执行一段代码都会创建一个执行上下文,当中包括:- 变量
- this
- 作用域链
-
闭包
函数的内部的函数可以访问其外部的作用域。- 作用
- 私有变量
- 全局变量污染
- 影响
- 内存泄漏(无法GC)
- 作用
-
event loop 事件流
javascript代码执行分为两个队列,宏任务和微任务,先执行一个宏任务,接着执行完所有的微任务,循环。- 宏任务
setTimeout、setInterval、DOM、request - 微任务
Promise、async/await、nextTick、Observer
- 宏任务
1 |
|
点击查看答案
1 7 6 8 2 4 3 5 9 11 10 12
-
Promise
- all
全部成功才是成功 - any
有一个成功就是成功 - race
最先完成的算完成 - allSettled
全部处理完才结束
- all
-
垃圾回收
- 引用次数清除
计算对象引用次数,为0的清除。 - 标记清除
活动对象打标,未标记的清除。
- 引用次数清除
-
模块化
将多个不同的文件,按照一定规范进行划分,得到的一个个块。- 规范
- CommonJS
同步加载
可缓存
值的拷贝,内部值改变不会影响到外部
module.exports、exports.xxx = xxx、require
- AMD
异步加载
define([module], callback)、require([module], callback)
- CMD
可同步(require
)也可异步(require.async
)加载
使用时才加载(和AMD的区别)
define(function(require, exports, module) {})
- ESM
ES6新规范
静态化,编译时就确定依赖关系
值的引用
export default、 export const xxx = xx、import xx from xx
- UMD
通用模块规范,可以在任何环境运行
立即执行函数内实现前面各个规范的兼容
- CommonJS
- 规范
-
性能优化
- 代码优化
- 防抖节流
- cssText
- 重绘重排
- 懒加载
- 事件委托
- 构建优化
- 代码压缩
- gzip
- cdn
- 其他
- http2
- 图片压缩
- 减少请求
- 缓存
- 代码优化
-
this
指向- 普通函数
不作为对象属性时,this
指向全局 - 方法函数
作为对象方法,this
执行对象 - 构造函数
作为构造函数,执行new
前创建对象,this
指向该对象 call
、apply
、bind
指向传入对象
- 普通函数
-
json
function
、undefined
会被忽略
NaN
变为null
-
offsetWidth
、clientWidth
、scrollWidth
clientWidth = width + padding
offsetWidth = width + padding + borderWidth + scrollBarWidth
scrollWidth = width + padding + scrollWidth -
一道奇怪的题目
1 |
|
点击查看代码1
结束
结束🔚。
参考资料
从URL输入到页面展现到底发生什么?
做了一份前端面试复习计划,保熟~
这一次,彻底弄懂 JavaScript 执行机制
聊聊跨域的原理与解决方法
一道常被人轻视的前端JS面试题
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!