# 为什么 setTimeout 的最小延迟是 4 毫秒?如何模拟 setTimeout 的 0 毫秒延迟?
以前是 0 ,但是会导致主线程会被 setTimeout 频繁占用,影响性能和用户体验;为了规避这种情况,html5 设置为了最小 4ms
模拟方式 1:
Promise.resolve().then()
实现,将任务放到微任务队列,它的优先级比 setTimeout 高,能够在同一轮事件循环里面进行回调,几乎是立即执行模拟方式 2:
MessageChannel
实现,这是一种更底层的浏览器 API,也是异步回调,利用消息传递机制安排一步执行,几乎是立即执行
# 怎么判断用户的客户端
navigator.userAgent,浏览器的属性,提供了用户客户端的信息,包含了用户浏览器、操作系统、设备等详细信息
# 什么是 词法分析 语法分析
词法分析,逐个字符扫描源代码,根据预定的
词法规则
,将字符序列组合成词法单元
(关键字、运算法、标识符等)语法分析,根据上下文无关文法(CFG)的
语法规则
,将词法单元
组成成一颗抽象语法树
(AST)
int a = 10;
=>
词法单元:
关键字:int; 标识符: a; 赋值操作符: =; 整数常量: 10; 分号: ;
=>
抽象语法树:
Assignment
├── Type: int
├── Variable: x
└── Value: 10
# get post 请求的差别
语义不一样,get 是读取资源,post 是提交数据
get 参数通过 url 传递,参数可见,而且有大小限制 2048 字符;post 通过请求体传递,url 不会显示数据,适合大量数据、敏感数据
get 请求可以被浏览器或代理服务器缓存;post 默认不会被缓存
get 是幂等操作,不管发送多少次请求,服务器返回的结果应该是相同的,不会对服务器数据产生影响 post 通常是非幂等操作,一个 post 请求多次发送可能会产生不同的结果