关于面试被问的最多的面试题

文章探讨了Vue2的双向数据绑定机制,基于object.defineProperty(),以及Vue3如何通过ES6的Proxy实现改进。同时,解释了computed和watch的差异,以及$router和$route在Vue中的角色。此外,还涵盖了JavaScript的基础概念,包括原型链、作用域链、垃圾回收机制、数组方法和深浅拷贝的概念。最后,提到了闭包的定义及其优缺点,以及forEach和map在遍历数组时的不同之处。
摘要由CSDN通过智能技术生成

vue2双向数据绑定原理

vue2双向数据绑定是采用 数据劫持 结合 发布者-订阅者的方式,其核心是通过object.defineProperty()来劫持各个属性的setter和getter,当数据发生变化的时候,会发送消息给订阅者,触发相应的监听回调;

每个组件都有一个watcher实例,当依赖值的setter被调用的时候,会通知watcher重新计算,使其关联的组件得以更新

vue3 放弃了object.define.property() , 使用了更快的Es6原生proxy

computed和watch的区别

computed有缓存,依赖其他属性值,只有当他依赖的属性值发生变化的时候,computed才会重新计算;

watch 没有缓存,更多的是观察的作用,他类似某些数据的监听回调,当他监听的数据发生变化的时候会执行回调进行后续的操作;

$router和$route的区别

this.$router 是路由的实例对象,

this.$route 是路由信息对象

说一说原型和原型链

每一个函数都有一个prototype属性指向自身的原型,而由这个函数创建的对象都有一个proto属性指向这个原型,而函数的原型是一个对象,这样逐层深入,直接指向object对象原型,这样就形成了原型链

说一说作用域链

作用域链可以理解为一组对象列表,包含 父级和自身的变量对象,因此我们可以通过作用域链去访问父级里面声明的变量或者函数!

Js垃圾回收机制

js的垃圾回收机制是为了防止内存泄漏,他会不停歇去寻找那些不再饮用的变量,并且释放掉他指向的内存;

垃圾回收机制有两种方式,一种是标记清除,一种是引用计数;

数组方法

forEach & map 用于遍历和循环

Push & pop 用于末尾添加和删除

Shift & Unshift 用于头部添加和删除

Sort & reverst 用于排序和反转

spice 用于 切割 删除 截取

slice 截取

Join 拼接字符串

indexOf & lastIndexOf 查找数组项,返回对应的下标

some 有一项返回为true 则整体为true

every 有一项返回 false 则整体为false

filter 过滤

concat 拼接数组

reduce & reduceRight prev是上一次的值,cur 是当前值

js深浅拷贝

浅拷贝 object.assign() / 拓展运算符 / 通过循环遍历 /

深拷贝 JSON.parse(JSON.stringfy()) / 递归函数

闭包

闭包就是一个函数能够读取其他函数内部变量的函数;

基本上就是一个函数内部返回一个函数

好处:

可以读取函数内部的变量

将变量保存在内存中

封装对象的私有属性和私有方法

坏处:

比较耗费内存,使用不当会出现内存泄漏问题

forEach和map的区别

forEach 是最基本的遍历与循环,他默认有三个参数,第一个参数 是当前的数组项item 第二个参数 是数组的索引 index

第三个参数 是当前的数组 Array。 map基本和forEach相同,不同点是 他会返回一个新数组,所以callback 需要有return 值 如果没有return 会返回undefined

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值