有些问题的答案可能不是很准确,大家可以自行去查,加深理解,没写答案的也是重点。
事件委托:就是事件代理,事件触发时候,根据冒泡原理,可以直接委托父元素处理,节约内存,为之后增加的DOM元素依然添加这个事件
promise:异步编程
同源策略:指的是协议、域名、端口相同,脚本不能访问不同源的资源
解决跨域:JSONP、CORS(Access-Control-Allow-Origin:*)、WebSocket、postMessage、document.domain+iframe、location.hash+iframe、window.name+iframe
前端常见安全问题:1.sql注入:url里面有对数据库进行操作的参数,预防:数据转义2.xss攻击:跨站脚本攻击,预防方法:用户输入的数据发到服务器后台前,进行转义;过滤掉js事件标签和一些html标签;重要cookie标记为http only3.csrf:跨站点请求伪造,预防:请求地址添加token验证4.点击劫持:在某些透明按钮上加一层透明的iframe,预防:设置X-Frame-Options响应头;js判断域名是否一致
原型:每个函数对象都有一个Prototype属性,这个prototype就是函数的原型对象
原型链:每个对象都有一个_proto_,它指向它的prototype原型对象,prototype原型对象又有自己的原型对象,层层找,直到找到一个对象的prototype=null,这个查询路径就是原型链
typeof和instanceof的区别:typeof返回一个字符串,判断变量是什么基本类型的,instanceof返回true或false,判断变量是否是某个对象的实例
new的过程:1.创建一个新对象2.this指向这个对象3.执行代码,通过this给新对象添加属性和方法4.返回新对象
箭头函数:不会创建自己的this,从自己的作用域链找父级执行上下文的this;不能当成构造函数;没有prototype属性;没有arguments对象
理解mvvm模式:m是model,代表数据模型,定义数据修改和处理逻辑业务,v是view,代表UI组件,负责将数据模型转成ui展现出来,vm是viewmodel,把view和model进行同步双向绑定
vue双向绑定原理:通过数据劫持,利用Object.defineProperty()的set方法和get方法实现数据双向绑定
vue生命周期:vue实例从创建到销毁的过程称为vue的生命周期
vue生命周期各阶段都做了什么:beforecreate实例创建前,created实例创建后;beforemount挂载前,mounted挂载实例,dom渲染;beforeupdate数据更新,不进行dom重新渲染,updated数据更新,dom渲染;beforedestory实例销毁前,destroyed实例销毁后
vue插槽:在子组件中提供给父组件使用的一个占位符slot
keep-live:使组件保留状态,避免重新渲染
axios有什么特点:基于promis的http库;可以拦截请求和响应;可以转换请求数据和响应数据,并对响应回来的内容自动转换为json类型数据;安全性更高,客户端支持防御csrf
tcp三次握手:第一次握手是建立连接时,客户端发送一个syn包到服务器,第二次握手是服务器收到后返回给客户端确认包ack和syn包,第三次握手是客户端收到返回的syn和ack包后,向服务器发送确认包ack,完成三次握手
输入url到页面呈现到浏览器的全过程:1.域名解析2.建立tcp连接3.发起http请求4.接收响应结果5.浏览器解析html6.浏览器布局渲染
闭包理解:闭包就是可以读取其他函数内部变量的函数,可以长久保存变量,不会造成污染,但是容易造成内存泄露,所以在退出函数前,要把不使用的局部变量全部删除
垃圾回收机制:标记清除,计数引用
get,post区别:get通过地址栏传值,一般用于获取资源,用url传递参数,对发送的信息数量有限制,一般在2000个字符;post通过表单传值,一般用于修改服务器的资源,对发送的信息没有限制
http和https区别:1.http是明文传输,https是具有安全性的ssl加密传输2.端口不同,http是80,https是443
变量提升:变量可以在声明前使用,值为undefined,避免方法就是使用不同变量名命名并且在函数头部定义变量并赋值
const let var比较:var有变量提升,let和const没有;var的作用域为全域,let和const是块级作用域;let和const不能重复定义;const必须初始化
盒模型:盒模型分为标准盒模型和IE盒模型,标准盒模型计算时不包含padding和border值,IE盒模型包含padding和border值
BFC:块级格式化上下文,脱离文档流时可创建,用于自适应布局,避免元素被浮动元素覆盖,去除边距重叠现象,清除内部浮动
清除浮动方法:父级div定义overflow:hidden;父级div定义height;父级div定义伪类:after和zoom;结尾处添加空div标签clear:both
浅拷贝和深拷贝:浅拷贝只复制一层对象的属性(Object.assign()、Array.prototype.slice() 、Array.prototype.concat()、扩展运算符);深拷贝是将各个属性复制到新内存里(JSON)
apply和call:改变this指向,参数不同,apply第二个参数是数组参数,call接受连续的参数
js基本数据类型:原始类型:string number Boolean null undefined symbol 引用类型:对象
cookie localstorage sessionstorage区别
cookie sessionstoragelocalstorage
大小4k5MB5MB
生命周期可以自己设置,默认到浏览器关闭浏览器关闭除非自行删除缓存否则一直在
易用性一般自己封装,浏览器与服务器之间来回传接口可以直接使用,本地保存接口可以直接使用,本地保存
数组去重:1.[...new Set(arr)];2.对象属性名不能重:ary[i]=ary[ary.length-1]3.indexof4.includes5.递归
冒泡原理:重复遍历要排序的数组,每次遍历过程中从头至尾比较两个相邻的元素,如顺序不对就交换两个元素,直到没有数字需要比较
快排原理:1.找数组最中间一个数为基准2.数组通过这个基准分为小于基准的left数组和大于基准right数组3.递归重复上面两个步骤
webpack中loader和plugin区别:loader使webpack拥有加载和解析非js文件能力;plugin可以扩展webpack功能,使webpack更加灵活。
浏览器兼容问题
前端优化问题,从内容,js,css各个角度分析
vue兄弟传值,父子之间传值
网友评论