-
如何取消请求
const xhr = new XMLHttpRequest();
xhr.abort()
2.深拷贝&&浅拷贝
浅拷贝: 拷贝的属性如果不是对象,则拷贝值,否则拷贝地址
深拷贝: 拷贝的都是值 不对原对象产生影响
常见的浅拷贝: Object.assign array.slice array.concat ...字符
常见的深拷贝: _cloneDeep JSON.parse(JSON.stringify) 会忽略函数 undefined symbol 循环引用等问题
手写深拷贝:
function cloneDeep(obj, map = new map()) {
if(obj === null) return null;
if(obj instanceof Object) {
const res = Array.isArray(obj) ? [] : {};
map.set(obj, res);
for(let item in obj) {
res[item] = cloneDeep(item);
}
return res;
}
3.谈谈vue中的diff算法
vue的diff算法是一种通过同层的树节点进行比较的高效算法,有两个特点:
只会同级比较,不会跨层比较。
在diff比较的过程中,循环从两边向中间比较
4. promise相关题解
promise的状态一旦发生改变就无法再改变 resolve之后后续不能继续改变状态
finally不管成功还是失败,都会执行,且它的回调函数无法接受到promise的结果
new promise如果没有返回值,则不执行后续的内容
then函数的参数期待是函数,如果不是函数则会发生透传
async中return的值可以被返回到then中传参
5. 缓存相关
-
实现图片懒加载的思路
scrollTop + clientHeight > offsetTop getBundingCilentRect().bottom > 0 && getBundingCilentRect().top < clinetHeight const io = new IntersectionObserver(callback, options) io.observe(DOM) -
css动画 && js动画
css动画的性能更好,浏览器会对css3的动画做一些优化
代码相对比较简单
在动画上控制不够灵活,兼容性不好
js动画的复杂度更高,动画控制更加灵活,对于复杂控制的动画,建议js,反之css