Appearance
面试复习
掘金-1
BFC是 css 渲染的一部分,是块盒子布局过程中发生的区域,也是浮动元素与其他元素交互的区域基本 数据类型 -> string number boolean undefined null
都是按值访问,这些值占用固定的栈内存,由系统自动分配存储空间
typeof有几种值 -> 'string' 'number' 'boolean' 'undefined' 'function' 'object'
引用 数据类型(数组/对象/函数)的大小是不固定的,保存在堆内存中(js 不能直接操作堆内存空间)
数据封装 类对象 -> String Number Boolean Array Object
js
typeof null === 'object' // true -> null 是空指针
typeof undefined === 'undefined' // true== 在比较之前会先对基本数据类型进行类型转换
getAttribute是获取在 HTML 中定义的属性,property是 DOM 对象的属性event.target触发事件的元素event.currentTarget绑定事件的元素几种绑定上下文 ->
.call和.apply是立即执行.bind是返回函数的副本some有一项返回 true 则整体为 true 否则返回 false -> []every有一项返回 false 则整体为 false 否则返回 true -> [][].slice.call(arguments)DOMContentLoaded 事件 -> HTML 文档被加载和解析完之后(无需等待样式表、图像和子框架的加载完)
- window 的 load 事件 -> DOM 和所有相关资源全部完成加载后
js
var el = document.createElement('div')
el.innerHTML
el.innerText
document.body.appendChild(el)
el.remove()
document.body.removeChild()CommonJSrequire 是值拷贝,导出值变化不会影响导入值
import 指向内存地址,导入值会随导出值而变化
微任务 microtask(jobs): promise / ajax / Object.observe(该方法已废弃)
宏任务 macrotask(task): setTimout / setInterval / script / IO / UI Rendering
navigator.userAgentcsrf -> 跨站请求伪造
原型链终点的对象(基础对象)的原型是 null
白屏时间
performance.timing.responseStart - performance.timing.navigationStart首屏时间
js
window.onload = () => {
new Date() - performance.timing.responseStart
}工作流程
- 用户输入 URL 地址
- 根据 URL 解析服务器 ip 地址
- 浏览器先查找本地 DNS 缓存列表,没有的话再向浏览器默认的DNS 服务器发送查询请求同时缓存起来
- 浏览器解析端口号
- 浏览器建立一条与目标 Web 服务器的 TCP 连接
- 你招手
- 妹子点头微笑并招手
- 你点头微笑
- 浏览器向服务器发送一条 HTTP 请求报文
- 服务器向浏览器返回一条 HTTP 响应报文
- 关闭连接,浏览器解析文档
- HTML 解析出 DOM Tree
- CSS 解析出 Style Rules
- 将二者关联生成 Render Tree
- Layout 根据 Render Tree 计算每个节点的信息(布局)
- GPU Painting 根据计算好的信息绘制整个页面(渲染)
debounce throttling
js
// eg 关键词搜索
function debounce(fn, wait) {
var timer = null
return function (...args) {
timer && clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, args)
}, wait)
}
}
// eg 平滑滚动
function throttling(fn, wait) {
var last = 0
return function () {
var now = Date.now()
if (now - last > wait) {
fn.apply(this, args)
last = now
}
}
}前端面试之道 笔记
基础
- Symbol: 原始数据类型值(唯一、不可改变,常用作对象私有匿名 key)
Symbol.hasInstanceSymbol.toPrimitive - 对象转为原始数据类型 Symbol.toPrimitive -> valueOf -> toString
event.stopImmediatePropagation()阻止该目标上别处注册的事件loader: 'babel-loader?cacheDirectory=true'- 对于跨域的代码运行错误会显示
Script error对于这种情况我们需要给script标签添加crossorigin属性