美文网首页
面试题20210225

面试题20210225

作者: 大萝蓓 | 来源:发表于2021-02-25 16:18 被阅读0次

    1、简述一下你对闭包的理解
    答:在js中函数可以访问函数外部的变量的,但是在外部拿不到内部的变量,A一个函数,B是A里面的子函数,在B里面把A的变量return出去,再把B函数给return出去,如果我要用A里面的变量就可以直接调用B函数了,这个就是闭包。
    2、闭包的优缺点
    答:优点:可访问函数内部的变量,防止变量污染作用域(隐藏变量),从而实现封装。
    缺点:本来局部变量会被垃圾回收机制给回收的,但是我们给返回到外面了,并且在引用的情况下,是不回被回收的,会造成内存的一些浪费
    3、ES6、7的新特性?
    4、ES6里面的class是怎么继承的?(不会)
    答:Class可以通过extends关键字实现继承。
    5、聊一下this指向,构造函数的this指向呢?
    答:1、this总是指向函数的直接调用者。2、如果有new关键字,this指向new出来的那个对象。3、在MOD实践中,this指向目标元素。4、箭头函数的this指向它所在的函数作用域,并且不能改变,始终指向的是window。
    6、computed和watch的区别
    答:computed支持缓存,值发生改变时才触发,watch是一直监听;computed不支持异步,watch支持;如果当前的这个值是通过别的值计算过来的建议使用computed,如果当这个值发生变化时要执行一些操作建议使用watch;computed属性值是函数,那么会默认走get方法,函数的返回值就是当前的值,在computed中,属性都有一个get和set方法,当数据发生变化时,调用set方法。watch监听的数据必须得是声明过的,当数据发生变化时,触发其他操作,函数有两个参数,
    immediate:组件加载立即触发回调函数执行,
    deep: deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器,但是这样性能开销就会非常大了,任何修改obj里面任何一个属性都会触发这个监听器里的方法。
    使用场景:
    computed:
        当一个属性受多个属性影响的时候就需要用到computed
        最典型的栗子: 购物车商品结算的时候
    watch:
        当一条数据影响多条数据的时候就需要用watch
        栗子:搜索数据
    7、route和router的区别(不会)
    答:route是路由信息对象,里面主要包含路由的一些基本信息,包括name、meta、path、hash、query、params、fullPath、matched、redirectedFrom。
    router是VueRouter的实例,包含了一些路由的跳转方法,钩子函数等。
    钩子函数:beforeRouteEnter(路由进入前)参数:to: 路由将要跳转的路径信息,信息是包含在对象里边的。from: 路径跳转前的路径信息,也是一个对象的形式。next: 路由的控制参数,常用的有next(true)和next(false)。
    beforeRouteUpdate(路由改变前)
    beforeRouteLeave(路由离开前)
    8、vue路由传参有几种方法
    答:1、通过query方式传参。2、通过params方式传参。3、直接在路由地址后面拼接参数。
    query和params区别
    1、用法上的
    query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.route.query.name和this.route.params.name。
    注意接收参数的时候,已经是route而不是router了哦!
    2、展示上的
    query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示。
    使用query传参的话,会在浏览器的url栏看到传的参数类似于get 请求,使用params传参的话则不会,类似于post请求。
    如果提供了path,params将会被忽略(即如果要使用params传参, 则一定要使用name),但是query不属于这种情况。如果使用完整 路径和query传参,刷新页面时不会造成路由传参的参数丢失。
    9、Vue.$nextTick知道是什么吗?(忘了...)
    答:获取最新的DOM。
    10、keep-alive是什么?
    答:避免重复渲染的一个标签,但是它本身不回渲染到dom上。利用场景:用户在某个列表页面选择筛选条件过滤出一份数据列表,由列表页面进入数据详情页面,再返回该列表页面,我们希望:列表页面可以保留用户的筛选(或选中)状态。
    11、Vue2和3的区别(不会)
    https://www.cnblogs.com/cxddgz/p/13153570.html
    12、promise的参数有什么,分别是什么作用?
    答:是异步队列的一种解决方案,promise有三种状态,1、pending(待定)出事状态。2、fulfilled(实现)操作成功。3、rejected(被否决)操作失败。
    局限性:
    首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。
    其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
    第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
    当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。
    all()方法:promise的all方法提供并执行异步操作的能力,并且在所有异步操作执行完成才执行回调

    //买作业本
            function cutUp(){
                console.log('挑作业本');
                var p = new Promise(function(resolve, reject){ //做一些异步操作
                    setTimeout(function(){
                        console.log('挑好购买作业本');
                        resolve('新的作业本');
                    }, 1000);
                });
                return p;
            }
    
            //买笔
            function boil(){
                console.log('挑笔芯');
                var p = new Promise(function(resolve, reject){ //做一些异步操作
                    setTimeout(function(){
                        console.log('挑好购买笔芯');
                        resolve('新的笔芯');
                    }, 1000);
                });
                return p;
            }
     Promise.race([cutUp(), boil()]).then(function(results){
        console.log("哈哈,我先买好啦");
         console.log(results);
     });
    

    race()方法:race方法和all用法一样,只要有一个异步操作执行完毕,就立刻执行 then 回调。

    只要有一个异步操作执行完毕,就立刻执行 then 回调
    

    13、const 可不可以修改?
    基本数据类型不可以修改,但是定义的对象是可以通过对象属性来改变值的,例如:

    const aaaaaa={aa:'dd'}
    aaaaaa.aa='bb'
    console.log(aaaaaa);//
    

    14、get和post的区别?
    答:1、传输数据的长度限制是不一样的,get传参的位置是在url里面的,一般浏览器限制大小是2k,post因为是在header的body里面的,所以对长度就没有限制。传输数据大小其实是可以改变的,浏览器的参数是可以配置的。2、从安全性来说,因为get的参数是拼接在url里的是,post是放在body里的,get方式的参数还会被缓存,会存在历史记录中,post不会,所以post要比get相对安全。3、get和post编码方式不同,用post的话会设置一下header的请求头,它的类型是form-data,get的是form-urlencoded。也有人把get请求传参放在body里的,也有人把post请求放在url里的,但是不符合接口传输规范。除了这两种方式还有put请求,是为了修改数据的,还有delete请求,是为了删除数据的。
    15、如何用css画出一个三角形?
    答:

    #triangle-up {
    width: 0;
        height: 0;
        border-left: 50px solid transparent;
        border-right: 50px solid transparent;
        border-bottom: 100px solid red;
    }
    

    16、Vue生命周期
    答:四个阶段,创建阶段、挂载阶段、更新阶段、删除阶段
    八个钩子函数,创建前beforeCreat、创建后created、挂载前beforeMount、挂载后mounted、更新前beforeUpdate、更新后update、销毁前beforeDestroy、销毁后destroyed,前四个是主动触发的,后四个是要被动触发的。
    17、谈谈eval的理解?
    答:这个一个完整的js解释器,把代码写进去他会帮忙执行,正是这样它执行效率特别慢,要编译一次再执行一次,eval声明的变量不会变量提升

    相关文章

      网友评论

          本文标题:面试题20210225

          本文链接:https://www.haomeiwen.com/subject/wzrufltx.html