前端3000工资实习面试题目笔试
1、什么是MVVM、mvc模型?
MVC:MVC即model-view-controller(模型-视图-控制器)是项目的一种分层架构思想,它把复杂的业务逻辑,抽离为职能单一的小模块,每个模块看似相互独立,其实又各自有相互依赖关系。它的好处是:保证了模块的智能单一性,方便程序的开发、维护、耦合度低。
mvvm:MVVM:MVVM即Model-View-ViewModel,(模型-视图-控制器)它是一种双向数据绑定的模式,用viewModel来建立起model数据层和view视图层的连接,数据改变会影响视图,视图改变会影响数据
2、vue双向数据绑定的原理?
vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。具体步骤:第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:1、在自身实例化时往属性订阅器(dep)里面添加自己2、自身必须有一个update()方法3、待属性变动ice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。
第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化->视图更新;视图交互变化(input)->数据model变更的双向绑定效果。
3、vue的生命周期有哪些?
vue实例从创建到销毁的过程就是生命周期。也就是从开始创建、初始化数据、编译模板、
挂在dom->渲染、更新->渲染、准备销毁、销毁等一系列过程vue的声明周期常见的主要分为4大阶段8大钩子函数另外三个生命周期函数不常用keep-alive主要用于保留组件状态或避免重新渲染。activated只有在keep-alive组件激活时调用。deactivated只有在keep-alive组件停用时调用。errorCapured当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回false以阻止该错误继续向上传播。
一、创建前/后在beforeCreate生命周期函数执行的时候,data和method还没有初始化在created生命周期函数执行的时候,data和method已经初始化完成
二、渲染前/后在beforeMount生命周期函数执行的时候,已经编译好了模版字符串、但还没有真正渲染到页面中去在mounted生命周期函数执行的时候,已经渲染完,可以看到页面
三、数据更新前/后在beforeUpdate生命周期函数执行的时候,已经可以拿到最新的数据,但还没渲染到视图中去。在updated生命周期函数执行的时候,已经把更新后的数据渲染到视图中去了。
四、销毁前/后在beforeDestroy生命周期函数执行的时候,实例进入准备销毁的阶段、此时data、methods、指令等还是可用状态在destroyed生命周期函数执行的时候,实例已经完成销毁、此时data、methods、指令等都不可用
4、v-if和v-show有什么区别?
v-if是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件和子组件适当地被销毁和重建,操作的实际上是dom元素的创建或销毁。
v-show就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换,它操作的是display:none/block属性。
一般来说,v-if有更高的切换开销,而v-show有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用v-show较好;如果在运行时条件很少改变,则使用v-if较好。
5、async await是什么?它有哪些作用?
async await是es7里面的新语法、它的作用就是async用于申明一个function是异步的,而await用于等待一个异步方法执行完成。它可以很好的替代promise中的then
async函数返回一个Promise对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
6、常用的数组方法有哪些?
concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
find()方法返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined。
mvc实例findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
includes()方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true,否则返回false。
indexOf()方法返回在数组中可以到一个给定元素的第一个索引,如果不存在,则返回-1。(通常用它判断数组中有没有这个元素)
join()方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。
pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
shift()方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
unshift()方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。
splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论