css计算过程
- 确定声明值
- 层叠
- !important 的作者样式
- !important 的默认样式
- 作者样式
- 默认样式
- 继承
- 默认
相信很初学者在使用body-parser
时感到疑惑
我们先说说他的作用,其实很简单,就是把HTTP请求里的请求体传参解析出来
我们在使用接口测试工具时(例如:postman
Apipost
)
可以看到请求体传参有 content-type
分别是 multipart/form-data
和 application/x-www-form-urlencoded
1 | Content-Type: multipart/form-data; boundary= |
key=value&key2=value2
,其实和query参数一样,只是后者在请求头,前者在请求体里Eg: “中”在UTF-8编码中表示为0xE4B8AD –> %E4%B8%AD
我们再说回body-parser
它支持解析urlencoded
而不支持form-data
如果想要解析form-data
可以使用busboy
1 | /** |
options:
1 | { |
observer.observe(elementNode)
observer.takeRecords()
observer.disconnect()
取消监听
observer.unobserve(elementNode)
取消对target的监听
MutationObserver 用于观察DOM的任何变动
但是DOM的变动是同步的,而此方法是异步微任务
1 | /** |
1 | /** |
options:
1 | { |
注意:
childList 所指的子节点包括 文本内容也是一个节点
observer.disconnect()
停止监听
observer.takeRecords
用来清除变动记录,即不再处理未处理的变动。该方法返回变动记录的数组。
插槽本质就是函数
父组件内通过<Child></Child>
方式是实例化子组件时如果使用了插槽,如下:
1 | <!-- App.vue内 --> |
则插槽内容是一个对象,对象里面包含了 default
namedSlot
scopeSlot
这三个函数
1 | <!-- Child.vue内 --> |
<slot></slot>
其实是调用那三个函数
scopeSlot( {data: {...}} )
作用域插槽就是传了参数的函数而已
<slot></slot>
的位置1 | import {h} from 'vue' |
path url file http
等require('moduleName')
require('/moduleName')
require('./dir/moduleName')
require('moduleName')
.js .json .node
顺序为其加上拓展名require('moduleName')
方式导入先当作核心模块加载,如果没有则再当作第三方模块加载第三方模块加载会一层一层的向外查找。
是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术
1 | // 函数封装后 |
Currying后
1 |
|
1 | 写一个add函数 要求: |
1 | function add() { |
很好的一篇博客Service Worker
element-ui/elementUI-plus
v-abbreviation
1 | import ElementUI from "element-ui" |
现已发布到npm: npm i Vabbreviation
安装