每日面经(一日5题系列)
1. Js的几种模块化规范
① commonJs,通过require引入模块,通过module.exports导出模块,是node专用的模块加载方案,以同步方式引入模块
② es6模块化规范,通过import和export来导入导出模块
③ commonJs与es6模块化的区别:
(1)CommonJs输出的是值的拷贝,es6输出的是值的引用
(2)CommonJs是运行时加载,ES6是编译时输出接口; CommonJS 模块就是对象,在输入时先加载整个模块,生成对象,再从对象上读取方法;es6模块不是对象,它的对外接口只是一种静态定义(一个只读的引用),在代码静态解析阶段就会生成,等到代码真正执行时,就根据这个引用到被加载的模块中去取值(运行时动态取值)
(3)CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段
④ AMD,采用异步方式加载模块,将依赖模块的语句放在一个回调里,加载完后执行回调函数
⑤ CMD也是异步模块加载方案,与AMD的区别在于对依赖的处理和依赖模块的执行时机不同
⑥ AMD与CMD的区别:
(1) 定义模块时,对依赖模块的引入方式不同:AMD推崇依赖前置,定义模块时,就要声明其依赖的模块;CMD推崇依赖就近,用到某个模块时才去引入
2. 进程和线程的区别
① 进程是资源分配的最小单位,线程是资源调度的最小单位
② 一个进程可以拥有多个线程,这些线程共享进程中的数据,线程由进程来启动和管理
③ 多个进程之间相互独立,进程中任一线程执行出错会导致整个进程崩溃
3. 修改elementUi样式的方式
① 引入全局CSS文件
② 通过::v-deep修改单个页面中的样式
③ 通过给组件再加一个class样式,来覆盖(但不是很通用)
4. Vue router中传参的方式
Query传参:以?key=value的形式传递,通过$route.query.key获取
Params传参:直接在path后面以/value展示,在路由配置通过/:key来声明占位,通过$route.param.key获取,携带params参数时,以对象形式声明只能使用name配置,不能用path配置
5. Vue组件间通信的方式
① Props和$emit(v-model):最常见的父子组件间通信
② Provide和inject:用于祖孙组件之间的通信,祖先元素提供变量对象,孙子组件注入变量名,即可访问
③ Parent和children:适用与父子组件中通信
④ Attrs和listeners:$attrs用于记录父传子的所有不被props捕获以及不是class和style参数,$listeners用于记录父传子的所有不含.native修饰器的事件,通常在二次封装组件时使用比较高效(要用v-bind绑定$attrs用v-on注册$listeners注入到子组件)
⑤ 全局事件总线:适用于任意间组件通信
安装全局事件总线:在beforeCreate中注册总线(Vue.prototype.$bus = this)就是当前应用的vm
A组件想接受数据就用this.$bus.$on(‘xx’,回调函数)
B组件提供数据就this.$bus.$emit(‘xx’,数据)
⑥ Vuex
#面经##秋招#