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