前端面试题整理

1工作中用到的前端优化:

  • 用js的图片懒加载解决网站图片过多,一次性加载慢的问题
  • CSS、JavaScript代码压缩合并
  •            使用CSS Sprint,雪碧图 精灵图
  •            使用CND
  • 使用打包工具,例如webpack

2原型链和继承:原型 构造函数 实例 prototype constructor _proto_

3怎么样实现继承:

call()apply()方法方式

原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承

混合方式 混合了call方式、原型链方式

快速继承:var obj1 =Object.create(obj)

4一行代码[1,2,3,4]变成2345:const str =arr.map(v=>{return v+1}).join('')')‘’

5深拷贝:function fn(obj){var newObj ={}; for(var k in obj){newObj[k]=typeof obj[k] ===“object”?fn(obj[k]): obj[k]}return newObj}

6什么是闭包?

在函数内部,定义一个子函数,可以用子函数访问父函数的私有变量。执行完操作以后,将子函数通过return返回。

闭包应用场景?

封装相关的功能集。

循环dom中的节点,打印对应的下标:

1

for (var i = 0; i < buts.length; i++) {

(function (i) {

buts[i].onclick = function () {

console.log(i);}

})(i)}

2

for (var i = 0; i < buts.length; i++) {

buts[i].onclick = (function (i) {

return function () { console.log(i);

}

})(i)

}

3存下标方法

for (var i = 0; i < buts.length; i++) {

buts[i].index=i

buts[i].onclick=function(){

console.log(this.index);

}

}

闭包产生什么影响?

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

jQuery和vue的区别:框架与库之间最本质区别在于控制权

:库是更多是一个封装好的特定的集合,提供给开发者使用,而且是特定于某一方面的集合(方法和函数),库没有控制权,控制权在使用者手中,在库中查询需要的功能在自己的应用中使用,我们可以从封装的角度理解库;

框架:框架顾名思义就是一套架构,会基于自身的特点向用户提供一套相当于叫完整的解决方案,而且控制权的在框架本身,使用者要找框架所规定的某种规范进行开发。

Vue中怎么刷新页面:location.reload()  this.$router.go()  provide / inject 组合

Vue中实现页面跳转:<router-link to=’url >

this.$router.push({path: ''/order/index''});

this.$router.push({path: '/order/page1',query:{ id:'2'}});

this.$router.push({name: '/order/page2',params:{ id:'6'}});

//  path:'路由里配置的index.vue的路径'//  params:{id:'1',name:'eva'} /query:{id:'5'}  需要传递的参数和值

路由传参params 和query两种方式的区别:

1、用法上的

query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.name和this.$route.params.name

注意接收参数的时候,已经是$route而不是$router了

{{this.$route.params.参数名}}

2、展示上的

query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示

Vue中的动态路由:router-link to=’url

es6语法:

Vue中怎么优化:

vue数据双向绑定原理:vue是通过Object.defineProperty()来实现数据劫持的。Get  set

Vue中怎么传递参数:

父子组件之间的数据传递,路由传参this.$router.pushquery //params 

通过localStorage或者sessionStorage来存储数据

  在应用复杂时,推荐使用vue官网推荐的vuex。

1.管理源码的工具:svn

2.产品线各个节点共享资料的工具:公司内部的网盘(类似百度网盘的功能)

3.产品研发流程的管理工具:teambition

Vue怎么解决跨域问题?

方法1.后台更改header

方法2.使用JQuery提供的jsonp

方法3.使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建)

例如请求的url:“http://f.apiplus.cn/bj11x5.json”

打开config/index.js,在proxyTable

只要是通过 webpack 构建工具搭建的项目,都可以通过 webpack-dev-server 中的代理来解决跨域的问题

vue-cli 中如何配置代理???

  在 config/index.js 中配置 proxyTable,来实现代理的功能

  vuex是vue的状态管理工具和数据管理工具,核心仓库是 store

var store =new vuex.store({state:{‘’}})

Vuex的核心概念:state  mutations getters actions

module模块化

HTTP和HTTPS的区别:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

MVC和MVVM模式:MVVM数据的双向绑定 实现原理:vue实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。

浏览器兼容问题:不同浏览器的默认样式存在差异,可以使用 Normalize.css 抹平这些差异  

 简单粗暴法 * { margin: 0; padding: 0; }

解决 ie9 以下浏览器对 html5 新增标签不识别的问题。<!--[if lt IE 9]> <script type="text/javascript" src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script> <![endif]-->

解决 ie9 以下浏览器不支持 CSS3 Media Query 的问题。<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>

解决 IE 9 10 11 等浏览器不支持 <picture> 标签的问题<script src="https://cdn.bootcss.com/picturefill/3.0.3/picturefill.min.js"></script>

浏览器 CSS 兼容前缀

-o-transform:rotate(7deg); // Opera -ms-transform:rotate(7deg); // IE -moz-transform:rotate(7deg); // Firefox -webkit-transform:rotate(7deg); // Chrome transform:rotate(7deg); // 统一标识语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值