2021年前端面试题

本文详述了2021年Vue.js面试中常见的问题,涵盖Vue组件间的多种通讯方式,包括props、$emit、$parent/$children、$attrs/$listeners、provide/inject、$refs、eventBus和Vuex。同时讨论了v-if与v-show的区别,v-for使用key的原因,以及Vuex的理解与模块化。还涉及到vue-router的hash模式和history模式的工作原理,Vue生命周期的理解,vue-loader的作用,解决对象属性改变视图不更新的问题,以及ES6新特性和CSS3新特性。此外,文章还涉及HTML5新标签、数组去重方法,深入探讨了JavaScript中的深拷贝与浅拷贝,以及this指向问题的总结。
摘要由CSDN通过智能技术生成

一:Vue组件通讯有哪些方式?

1、props 和 $emit。父组件向子组件传递数据是通过props传递的,子组件传递给父组件是通过$emit触发事件来做到的。

2、$parent 和 $children 获取单签组件的父组件和当前组件的子组件。

3、$attrs 和 $listeners A -> B -> C。Vue2.4开始提供了$attrs和$listeners来解决这个问题。

4、父组件中通过 provide 来提供变量,然后在子组件中通过 inject 来注入变量。(官方不推荐在实际业务中适用,但是写组件库时很常用。)

5、$refs 获取组件实例。

6、envetBus 兄弟组件数据传递,这种情况下可以使用事件总线的方式。

7、vuex 状态管理。

二:v-if 和 v-show 的区别

v-if 在编译过程中会被转化成三元表达式,条件不满足时不渲染此节点。

v-show 会被编译成指令,条件不满足时控制样式将此节点隐藏(display:none)

三:v-if 和 v-for 为什么不建议一起使用

v-for和v-if不要在同一标签中使用,因为解析时先解析v-for在解析v-if。如果遇到需要同时使用时可以考虑写成计算属性的方式。

四:v-for为什么要加key

如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。key 是为Vue中Vnode的唯一标识,通过这个key,我们的diff操作可以更准确、更快速。
更准确:因为带key就不是就地复用了,在sameNode函数 a.key === b.key 对比中可以避免就地复用的情况。所以更加准确。
更快速:利用key的唯一性生成map对象来获取对应节点,比遍历方式块。

五:vuex 的个人理解

主要包括以下几个模块:

  • State:定义了应用状态的数据结构,可以在这里设置默认的初始化状态。
  • Getter:允许组件从Store中获取数据,mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性。
  • Mutation:是唯一更改 store 中状态的方法,且必须是同步函数。
  • Action:用于提交 mutation,而不是直接变更状态,可以包含任意异步请求。
  • Module:允许将单一的 Store 拆分更多个 store 且同时保存在单一的状态树中。

六:Vuex 为什么要分模块并且加命名空间?

模块: 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能会变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。

命名空间: 默认情况下,模块内部的 action、mutation、getter是注册在全局命名空间的 --- 这样使得多个模块能够对同一 mutation 或 action 做出响应。如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced:true 的方式使其成为带命名的模块。当模块被注册后,他所有 getter、action、及 mutation 都会自动根据模块注册的路径调整命名。

七:能说下 vue-router 中常用的路由模式和实现原理吗?

hash 模式

1、location.has 的值实际就是 URL 中 # 后面的东西。它的特点在于:hash虽然出现 URL 中,但不会被包含在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。

2、可以为 hash 的改变添加监听事件
window.addEventListener("hashchange",funcRef,false)
每一次改变 hash (window.location.hash),都会在浏览器的访问历史中增加一个记录,利用hash的以上特点,就可以实现前端路由“更新视图但不重新请求页面”的功能了
特点:兼容性好但是不美观

history 模式

利用 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。

这两个方法应用于浏览器的历史记录站,在当前已有的 back、forward、go 的基础上,他们提供了对历史记录进行修改的功能。这两个方法有个共同点:当调用他们修改浏览器历史记录栈后,虽然当前 URL 改变了,但浏览器不会刷新页面,这

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2021前端面试题主要集中在以下几个方面: 1. JavaScript基础知识: 包括数据类型、变量作用域、闭包、原型链等。考察候选人对JavaScript语言的理解和熟练程度。 2. ES6新特性: 对于ES6的新特性,如箭头函数、解构赋值、模块化等,考察候选人是否了解并能够灵活应用。 3. HTML和CSS基础: 考察候选人对HTML语义化、标签用途、样式的掌握程度。同时还会涉及到盒模型、浮动、定位等CSS的常见属性和布局方式。 4. 前端框架和库: 考察候选人是否了解常用的前端框架和库,如React、Vue、Angular等,并能够根据实际情况选择合适的技术方案。 5. 数据交互和网络请求: 考察候选人对AJAX、Fetch、WebSocket等数据交互方式的了解,并能够根据需求进行网络请求和数据处理。 6. 性能优化和调试: 考察候选人对代码性能优化和调试技巧的了解,包括减少网络请求、代码压缩和合并、浏览器缓存等方面。 7. 前端工程化: 除了前端基础知识,还会考察候选人对前端工程化的理解,包括模块化、构建工具、自动化测试、持续集成等方面。 总体而言,2021前端面试题主要关注候选人的基础知识和实际应用能力,倾向于综合考察候选人的全面素质和解决问题的能力。因此,候选人需要做好充分的准备,包括扎实的基础知识掌握、实际项目经验和应用能力的展示,以及对前沿技术的关注和了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值