刷题-js

114 阅读1分钟
  1. 如何取消请求

    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. 缓存相关

image.png

  1. 实现图片懒加载的思路

     scrollTop + clientHeight > offsetTop
     
     getBundingCilentRect().bottom > 0 && getBundingCilentRect().top < clinetHeight
    
     const io = new IntersectionObserver(callback, options)
    
     io.observe(DOM)
     
    
  2. css动画 && js动画

    css动画的性能更好,浏览器会对css3的动画做一些优化

    代码相对比较简单

    在动画上控制不够灵活,兼容性不好

    js动画的复杂度更高,动画控制更加灵活,对于复杂控制的动画,建议js,反之css