摘要:

01.VUE中组件通信的几种方式:
①Props:子组件设置props属性,定义接收父组件传递过来的参数。
②$emit触发自定义事件:子组件通过$emit触发自定义事件,$emit第二个参数为传递的数值。父组件绑定监听器获取到子组件传递过来的参数
③ref:父组件在使用子组件的时候设置ref。父组件通过设置子组件ref来获取数据
④EventBus:创建一个中央时间总线EventBus,兄弟组件通过$emit触发自定义事件,$emit第二个参数为传递的数值,另一个兄弟组件通过$on监听自定义事件。
⑤parent或root:通过共同祖辈$parent或者$root搭建通信侨联
⑥attrs与listeners:祖先传递数据给子孙,设置批量向下传属性$attrs和$listeners,包含了父级作用域中不作为 prop 被识别 (且获取) 的特性绑定 ( class 和 style 除外),可以通过 v-bind=”$attrs” 传⼊内部组件。
⑦provide与inject:在祖先组件定义provide属性,返回传递的值在后代组件通过inject接收组件传递过来的值。
⑧vuex:作用相当于一个用来存储共享变量的容器

02.vue生命周期:

钩子名称 触发时机
beforeCreate 实例初始化之后,数据观测和事件配置之前调用。
created 实例创建完成后立即调用,此时实例已经完成数据观测、属性和方法的运算、watch/event 事件回调。
beforeMount 在挂载开始之前被调用:相关的 render 函数首次被调用。
mounted el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
beforeUpdate 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
updated 由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
beforeUnmount 实例卸载之前调用。
unmounted 实例被卸载之后调用。

03.箭头函数和function函数的区别:
①箭头函数不能作为构造函数,不能使用new关键字。
②this的指向不同。
③箭头函数没有arguments参数。
④箭头函数不能使用call,apply,bind更改this指向。
⑤不可以使用yield命令,箭头函数不能作为generator函数。
⑥箭头函数不具有prototype原型对象。
⑦箭头函数不具有super。
⑧箭头函数不具有new.target。

04.JS中使用new创建一个对象的过程:
①创建空对象obj。
②我们将这个空对象的 proto 成员指向了 Base 函数对象 prototype 成员对象;
③我们将 Base 函数对象的 this 指针替换成obj,然后再调用 Base 函数,于是我们就给 obj 对象赋值了一个 id 成员变量,这个成员变量的值是 ”base” ,关于 call 函数的用法。

Vue 中为什么将 data 定义为函数而不是对象:
为了确保每个组件实例都拥有独立的数据副本。
data 的函数返回的是一个对象,好处在于,我们可以在对象中定义组件的初始数据,并在需要时进行扩展。
data 是一个对象,那么无法追踪其中属性的变化。只有将 data 定义为函数,每次调用函数时返回一个新的对象,才能确保 Vue 能够正确地追踪数据的变化,并在数据发生改变时更新视图

typescript中interface和type的区别:

type用于给一个类型起新名字,类型别名不仅可以用来表示基本类型,还可以用来表示对象类型、联合类型、元组和交集。
interface是命名数据结构,仅限于描述对象类型。

http的缓存机制:
缓存的识别:当客户端向服务器请求一个资源时,服务器会发送一个响应,其中包含一个或多个 HTTP 头部信息。这些头部信息中包含了关于该资源缓存行为的信息。客户端或代理服务器会根据这些信息来判断是否从缓存中读取资源。
验证:如果客户端决定从缓存中读取资源,它会发送一个请求到服务器,以验证缓存的资源是否仍然有效。服务器会检查请求的资源是否发生变化,并返回相应的响应。如果资源未发生变化,客户端可以直接使用缓存的资源;否则,客户端需要重新从服务器下载资源。
过期:资源的过期时间可以通过 HTTP 头部信息中的 Expires 或 Cache-Control 进行设置。当资源过期后,客户端或代理服务器将重新向服务器请求最新的资源。

http的强缓存与协商缓存:
强缓存:强缓存是由浏览器自动控制的缓存机制。当浏览器从服务器下载资源时,服务器会发送一个带有 Expires 或 Cache-Control 头部信息的响应。浏览器会根据这些信息来判断是否直接使用缓存的资源。由于强缓存是由浏览器控制的,因此它可以有效地减少不必要的网络传输量。
协商缓存:协商缓存是由浏览器和服务器共同控制的缓存机制。当浏览器需要读取一个资源时,它会先向服务器发送一个请求,以验证缓存的资源是否仍然有效。如果资源未发生变化,服务器会返回一个带有 304 Not Modified 状态码的响应;否则,服务器会返回最新的资源。由于协商缓存需要与服务器进行通信,因此它可以在某些情况下提供更好的性能。

谈谈对闭包的理解:
①概念(内层函数+外层函数的变量):
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)
也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域
在 JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁
②使用场景:
创建私有变量与延长变量的生命周期。