前端面试十道题

139 阅读4分钟

1.什么是原型对象

每一个构造函数都有一个prototype属性,这个属性的值是一个对象,这个对象就是构造函数的原型对象.一般建议把构造函数的成员属性绑定到原型对象上,因为原型对象上的属性默认能被构造函数的实例对象访问到.这样可以保证在每次用new关键字创建实例化对象的时候,这些方法不会在内存中重复被创建,

2.什么是原型链

每一个构造函数都有一个prototype属性,即原型对象,通过实例对象的proto属性,也可以访问原型对象,而原型对象也是对象,是对象就有自己的原型对象,最终形成的链状结构就是原型链.

proto对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

3.什么是构造函数

构造函数本质是一个函数,定义构造函数的名字,首字母要大写,调用的时候,必须用new关键字创建一个实例化对象,一般不直接使用构造函数,而是使用它的实例化对象,构造函数是js面向对象的一部分.

4.什么是闭包, 有什么作用, 使用的时候需要注意什么?

闭包是一个跟函数相关的概念,表现形式是父函数里面嵌套一个子函数,子函数直接或者间接被返回到外部作用域,子函数会使用到父函数里面的变量,当我们在外部调用这个子函数的时候,就会发生闭包现象.

闭包的作用:延展变量的作用范围

注意事项:不要滥用闭包,会导致内存泄漏.

5.什么是预解析

js代码在执行之前,解析引擎会对代码预先进行检查,会将变量和函数的声明提升到最前面,变量只提升声明,不提升赋值.

6.谈谈对promise的理解

promise本身没有提供任何代码逻辑,它只是帮助我们改造代码结构.可以解决传统的回调地狱问题.代码层面promise提供了一个构造函数,使用promise需用new关键字创建实例化对象,对象里含有一个匿名函数,匿名函数有两个参数resolve和reject,分别是成功处理函数和失败处理函数.函数的结果由promise的then方法负责传递,promise提供两个静态方法,race,all,all方法可以一次使用多个promise对象,返回值是数组.race也可以一次使用多个promise对象,只不过它是看哪个promise的结果返回的最快,就先执行哪个.

7.Ajax 的工作原理

通过xmlHTTPRequest对象来向服务器发异步请求,从服务器获得数据.然后用js来操作DOM而更新页面.最关键的一步就是从服务器获得请求数据.xhr是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术.简单的说,也就是js可以及时向服务器提出请求和处理响应,而不阻塞用户,达到无刷新的效果.

8.v-show 和 v-if 在隐藏一个元素的时候有什么不同, 应该如何来选择?

v-show是通过css的方式控制显示和隐藏,v-if是根据条件是否成立来控制是否创建或销毁DOM元素,如果某个元素需要频繁切换显示状态的话,建议使用v-show,因为频繁创建和销毁DOM增加性能的开销.

9.谈谈对于MVVM的理解

MVVM有三部分组成,分别为model(数据层),view(视图层),vm(view-model)视图模型层,它是一种框架的设计思想,vue就是基于它设计的.model负责初始化数据,view负责页面的展示,vm用来连接view层和model层,负责将数据层的数据传递给一个视图层进行展示,将视图层的操作传递给数据层进行持久化.

10.Vue 创建组件的时候,data 为什么要使用匿名函数 return 一个 对象?

因为对象是一个引用数据类型,在内存中只有一份.data中的数据如果直接是个对象,后期组件在调用的时候,会相互影响,因为每次调用操作的data对象是一样的.如果用匿名函数return这个对象,每次使用的时候,都会创建一个新的对象,不会相互影响.