1 CSS
line-height 的继承机制
父元素行高20px:子元素行高直接继承20px
父元素2或者1.5:子元素行高就是font-size的2倍或者1.5倍
父元素200%:子元素行高是200%乘以父元素的font-size而不是乘子元素的font-size
flex画筛子三
box {
display: flex;
justify-content: sapce-between;
}
item:nth-child(2) {
align-self : center ;
}
item:nth-child(3){
aligin-self:flex-end;
}
响应式布局
rem vw vh vmax vmin 通过媒体查询的方式动态的设置跟字体的大小
rem的计算机制
(N)rem = html的font-size *( N)
例1:
默认的html的font-size是16px,div的font-size设置为1rem就是16*1=16px
为了便于理解,我们用F表示html的font-size,用R表示rem,用P表示px。
从上面的结果就可以得到公式 P = F * R
F = 16px
R = 1
P = 16 *1
结果P就是16px
例2:
如果html的font-size设置为100px
目标像数要求为16px
那div的font-size设置0.16rem
rem就是目标像数除以根元素
得到公式 R = P / F (rem = 目标px / html的font-size)
第三个公式
F = P / R
2 JS
变量类型,事件机制
值类型,引用类型,手写深拷贝,事件冒泡,事件代理
原型、原型链 、类 、继承
画出原型链的类图,解释supper,es5继承方式
// 构造函数
function Parent1(name) {
this.name = name;
this.age = 12;
}
function Child1() {
Parent1.call(this,'son');
this.type = 'child1';
}
console.log( new Child1().name); //son
闭包
作用域,自由变量,手写bind
Function.prototype.myBind = function (){
const args = Array.prototype.slice.call(arguments)
const t = args.shift() // 第一项为传入的this
const that = this
return function (){
retrun that.apply(t, args)
}
}
实际的应用场景
隐藏数据,比如jquery的自定义事件也是这样隐藏对象数据,只暴露方法
事件流,事件循环
事件流分为3个阶段:
(1)捕获阶段:事件从Document节点自上而下向目标节点传播的阶段;
(2)目标阶段:真正的目标节点正在处理事件的阶段;
(3)冒泡阶段:事件从目标节点自下而上向Document节点传播的阶段。
webpack构建流程
初始化 – 配置
编译 – loader,plugin
输出 – chunk
数组求和
// Accumulator (acc) (累计器)
// Current Value (cur) (当前值)
// Current Index (idx) (当前索引)
// Source Array (src) (源数组)
var sum = [0, 1, 2, 3].reduce(function(accumulator, currentValue) {
return accumulator + currentValue
}, 100) // 从100开始累加
console.log(sum) // 106
使用promise 封装一个图片加载的方法
function loadImg(src) {
const p = new Promise(
(resolve, reject) => {
const img = document.createElement('img')
img.onload = () => {
resolve(img)
}
img.onerror = () => {
const err = new Error('img load err' + src)
reject(err)
}
img.src = src
}
)
return p
}
const url1 = 'xxx1'
const url2 = 'xxx2'
loadImg(usr1).then(img1 => {
console.log(img1.width)
return img1
}).then(img1 => {
console.log(img1.height)
return loadImg(url2)
}).then(img2 => {
console.log(img2.width)
})
for of 和for in forEach的区别
for of 可以处理异步的遍历
const nums = [1, 2, 3]
// 先遍历完数组,先执行3次异步调用
nums.forEach(async (i) => {
const res = await getList(i)
console.log(res)
})
// 遍历移数组一次,执行一次异步调用,返回结果后再遍历数组下一项
!(async function () {
for (let i of nums) {
const res = await getList(i)
console.log(res)
}
})()