高度塌陷的原因?
父元素没有设置高度,子元素浮动后,会脱离文档流,导致子元素无法撑开父元素的高度,就会出现高度塌陷。
延伸问题
why -> overflow: hidden; 可以解决高度塌陷
because -> 计算高度的时候会把浮动元素的高度计算进去
解决高度塌陷问题的方法自行查找,这里不做过多陈述。
var 和 let 区别
声明变量 let、const -> let/const/var 的区别?
let & const区别
a. let/const 声明的变量都存在当前上下文的AO/VO 变量对象中
b. const 声明的变量必须赋初始值
c. let 声明的变量,可以改变 '变量'和 '值' 之间的指针指向,const 不可
let & var 的区别
a. var 存在变量提升,let 不可以
b. let 申明 的变量存在在 VO/AO 中, var 声明的变量存在 GO
c. let 存在暂时性死区
d. var 可以重复声明
e. 在JS 代码执行过程中,如果大括号(除对象和函数的)
中出现let/const/function/class 等关键词,
则大括号所在的代码块,会产生一个「私有块级上下文」var 不会产生块级上下文,且对 var 没有任何作用
Promise/async/await
这里放个阮一峰大佬的写的es6具体可参考 es6.ruanyifeng.com/
useMemo & useCallback的区别?
输出题
var name = "hh";
var obj = {
name : "kk",
func1: function () {
console.log(this.name)
},
func2: function () {
setTimeout(function () {
this.func1()
}, 1000);
}
};
obj.func2();
// 扩展 输出 kk ,怎么实现?
手写实现 reduce
function _reduce(fn, init) {
let self = this, result;
if(init) {
result = init;
}else {
result = self[0];
self.splice(0, 1);
}
self.map((item, index) => {
result = fn(result, item, index, this);
})
return result;
}
不新建数组的前期下实现数组的反转
function _reverse(arr) {
if(Array.isArray(arr)) Throw Error('...');
let reft = 0; // 左指针
let right = arr.length - 1; // 右指针
for(let i = 0; i < arr.length; i++) {
if(left < right) {
let temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
return arr;
}
手写Promise.all
Promise._all(promiseAry) {
let arr = [];
return new Promise((resolve, reject) => {
PromiseAry.map((item, index) => {
Promise.resolve(item).then(res => {
arr[index] = res;
if(arr.length === promiseAry.length) {
resolve(arr);
}
}).catch(err => reject(err))
})
})
}
实现 usePrevious
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref;
}
给定是字符串,输出指定格式
{ a: [1,2,3], b: 2, c: 3 }
let str = 'a=1&b=2&c=3&a=2&a=3'
function fn(str) {
let obj = {};
str = str.split('&');
str.map(item => {
let [key, value] = item.split('=');
if(obj[key]) {
obj[key] = [[obj[key]]].concat([value]).flat(Infinity);
}else {
obj[key] = value;
}
})
return obj;
}
console.log(fn(str));