从面试中查漏补缺

工作以来换了几个地方,这次打算认真找一个合适的公司。总结一下部分最近遇到的面试题

1.宏队列和微队列

宏队列:dom事件回调、ajax回调、定时器回调

微队列:promise回调、mutation回调

执行时下一个宏队列时会先执行微队列。

const first = () => (new Promise((resolve, reject)=>{
    console.log(3);
    let p = new Promise((resolve, reject)=>{
        console.log(7);
        setTimeout(() => {
            console.log(5)
            resolve(6)
        }, 0);
        resolve(1);
    })
    resolve(2);
    p.then(value=>{
        console.log(value)
    })
}))

first().then(value=>{ 
    console.log(value)
})

console.log(4);

输出结果为:3 7 4 1 2 5 

 

2.闭包

用途:函数传参

函数防抖,

封装私有变量,

作为回调

定义行为,然后把它关联到某个用户事件上(点击或者按键)。代码通常会作为一个回调(事件触发时调用的函数)绑定到事件。

<body>
    < a href=" " id="size-12">12</ a>
    < a href="#" id="size-20">20</ a>
    < a href="#" id="size-30">30</ a>

    <script type="text/javascript">
        function changeSize(size){
            return function(){
                document.body.style.fontSize = size + 'px';
            };
        }

        var size12 = changeSize(12);
        var size14 = changeSize(20);
        var size16 = changeSize(30);

        document.getElementById('size-12').onclick = size12;
        document.getElementById('size-20').onclick = size14;
        document.getElementById('size-30').onclick = size16;

    </script>
</body>
</html>

优点:
1.保护函数内的变量安全,加强了封装性
2.在内存中维持一个变量(用的太多就变成了缺点,占内存)
闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖a中的变量。

缺点:会占用大量内存,

3.深拷贝和浅拷贝

拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存。

4.promise

5.指向与强制更改指向(call,apply,bind)

6.判断一个对象是否为数组

  1.通过instanceof判断

let a = [];
a instanceof Array; //true
let b = {};
b instanceof Array; //false

  2.Object.prototype.toString().call()获取到对象的不同类型

  3.Array.isArray() 

7. css画三角形(设置border属性即可)

8.立即执行函数

9.$.ref

  1、ref 加在普通的元素上,用this.ref.name 获取到的是dom元素

  2、ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法

  3、如何利用 v-for 和 ref 获取一组数组或者dom 节点(ref是作为渲染结果被创建的,所以在初始渲染时ref并不能被访问$ref也不是响应式的

    ref 需要在dom渲染完成后才会有,在使用的时候确保dom已经渲染完成。比如在生命周期 mounted(){} 钩子中调用,或者在 this.$nextTick(()=>{}) 中调用

    如果ref 是循环出来的,有多个重名,那么ref的值会是一个数组 ,此时要拿到单个的ref 只需要循环就可以了。)

10.async await 和promise的区别

  1.首先,两者都是异步编程的解决方案,但是async await是基于promise实现的

  2.promise的出现是为了解决callback回调地狱问题,但是它的写法会纵向排列为一个回调链,遇到复杂场景美观性要差一些,而async await写法上则类似与同步的写法,使异步代码看起来像是同步代码。

  相同之处:

  1. 都是非阻塞性的。

  2.都是异步操作。

11. vuex中存储数据和cookie等存储方式的应用场景

   vuex中数据存储在store中,数据是响应式的,数据有变动时会实时更新。

  而cookie和sessionstorage中的数据读取较慢,并且store的数据会在页面关闭时消失,而sessionstorage则需要关闭浏览器页面。

12....

 

posted @ 2021-07-29 21:38  妄欢  阅读(59)  评论(0编辑  收藏  举报