面试题 94题

1、px、em、rem区别介绍
	答:px像素单位
		em的值不是固定的,会继承父级元素的字体大小,默认1em=16px
		rem以根元素字体大小为基准,只修改根源上大小,就能成比例跳转所
		有字体大小,只依赖html字体的大小
========================================================
2、什么是跨域?跨域请求资源的发那个发有哪些?
	答:跨域产生在发送请求时,当浏览器和响应服务器不是同一台时,就会产生跨域。
		协议、ip、端口三者相同时,就会同源,不会有跨域问题。
		node.js解决:
			第一种:引入cors插件
			第二种:手动设置允许的请求ip和请求方式
		vue解决:
			在根目录新建vue.config.js
			后端API只有一台的情况,直接设置proxy连接目标服务器地址
			如果有多台,需要自定一个对应服务器的对象名,然后target设
				置目标服务器地址,changeOrigin设置true,pathRewrite
				把区分服务器的key删了
========================================================
3、Sass/Scss和less有什么区别?Sass有哪几大特性?
	答:编译环境不一样、变量符不一样,Less是@,而Scss是$,
			less没有输出设置,Sass支持条件语句,工具库不同 
			(https://www.cnblogs.com/wangpenghui522/p/5467560.html)
========================================================
4::before和:after种双冒号和单冒号有什么区别?解释一下这个元素的作用
		答::是伪类 向选择器添加特殊效果,::是伪元素 将特殊效果添加到选择器
	after写一个清除浮动的css代码
		答:.clearfix:after{
			      content: "";
			      display: block;
			      height: 0 ;
			      clear:both;
			      visibility: hidden;
			    }
========================================================
5、flexbox允许flex项多行排列/列排列,flexbox中的垂直居中
	答:felx-wrap		align-item
========================================================
6let/var/const的区别?
	答:ES5 var可以重新定义 可以重新赋值
		ES6 let不可以重定义 可以重赋值
		ES6 const不可以重定义 不可以重赋值
========================================================
7、用js实现防抖函数(短时间内多次出发同一事件,只执行最后一次),和节流函数
	(指连续触发事件但是在n秒中只执行一次函数)
	答:在一段时间内多次触发同一事件,但只会在规定时间内执行一次   节流
			例:坦克大战,多次点击发炮弹,最终还是只会发送第一次点击的炮弹
		触发事件后会延迟n秒执行,如果在这n秒内再次触发,则会重新计时  防抖
			例:英雄联盟回城按钮,无论按多少次都是根据最后一次来执行
		节流:	
				let isTf=false		//定义标杆为假
				if(isTf)return		//判断标杆是否为真?如果为假往下执,如果为真打断
				isTf=true			//把标杆定义为真
				setTimeout(()=>{	//倒计时3秒设置为假,在3秒内继续
				点击也是为真,会被打断
					isTf=false	
				},3000)
				//下面可以写入要执行的请求
		防抖:
				let timer=null;		//设置定时器为空
				function fd(){
					timer=setTimeout(()=>{
						console.log("需要执行")
					},3000)
				}
				btn.onclick=function(){
					clearInterval(timer)
					fd()
				}
========================================================
8、vue.js中,v-show和v-if有什么区别?
	答:v-show是在行内添加display:none;进行隐藏,而v-if是直接销毁
		当组件需要频繁切换用v-show 否则v-if
========================================================
9、怎么定义vue-router的动态路由?怎么获取传过来的动态参数?
	答:this.$router.push({path:"要跳转的地址",query:要传的参数})
		this.$router.push({name:"要跳转的地址",params:要传的参数})
			接收:this.$route.query				   
			接收:this.$route.params
			
		   query模仿get,params模仿post
例:this.$router.push(hash=="跳转的地址"?{path:"要跳转的地址",query:参数}:hash)
	做一个三目判断,hash如果是要跳转的地址就传入参数,否则就正常跳hash
========================================================
10、axios三层封装
	答:
		思想:
		最底层 - 封装get和post请求,设置默认地址,请求拦截器,响应拦截器
		中间层 - 各自的模块自己管理自己 方便后期维护
		视图层 - 在组件中调用接口 渲染数据
========================================================
11、关于MVC
	答:MVC是一个架构模式,他被分为三个核心部件:模型、视图、控制器
		模型 应用程序核心(数据)
		视图 用户界面
		控制器 应用程序处理请求进行处理,改变model数据
========================================================
12、三次握手四次挥手
	答:三次握手过程:
		第一次握手:客户端发送网络包,服务端收到了。
			这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是
			正常的。
		第二次握手:服务端发包,客户端收到了。
			这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收
			、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
		第三次握手:客户端发包,服务端收到了。
			这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发
			送、接收能力也正常。
			//因此,需要三次握手才能确认双方的接收与发送能力是否正常。
		四次挥手过程:
		客户端向服务器发送FIN希望断开连接请求。
		服务器向客户端发送ACK,表示同意释放连接。
		服务器向客户端发送一个FIN表示希望断开连接。
		客户端向服务器返回一个ACK表示同意释放连接。
			FIN表示关闭连接,
			ACK表示响应
========================================================
13、vue中怎么把框架单独打包?
	答:
========================================================
14、css盒子模型
	答:标准盒子:大小=内容+边框+内外边距
		怪异盒子:大小=宽度(内容+边框+内边距)+外边距
========================================================
15、html中行内元素和块级元素
	答:行内元素:a、span、img、input、b、textarea、lable、em、strong、select、button
		块级元素:div、ul、h1-h6、li、p、dt、dd、form
========================================================
16、css中选择器的优先级以css权重如何计算?
	答:!important>行内样式>ID选择器>类选择器>标签>通配符>继承>浏览器默认属性
		内联 1000	ID 10010	标签 1
========================================================
17、css中清除浮动有哪几种方式?
	答:1.在子元素并级后面添加一个新元素clear:both	 简单方便,空标签不方便维护
		2.给父元素加overflow:hidden,代码少,简单,只是不能配合定位用
		3..clearfix:after{
				content:"";			//设置内容为空
				display:block;		//转为块元素
				height:0;			//高度0
				clear:both;			//清除浮动
				visibility:hidden	//将元素隐藏
			}
			.clearfix:{zoom:1;}		//为了兼容IE
========================================================
18、解释一下js中事件委托,一般在什么场景使用?
	答:就是将子元素的事件写在一个父元素,让父元素代替处理,内部使用event.target,
	event.target就是触发这个事件的子元素。
	场景:当要给一组元素添加相同事件时,可以直接添加给父亲
========================================================
19、如何阻止事件冒泡和默认事件?
	答:事件冒泡阻止:event.stopPropagation()
		阻止默认事件:event.preventDefault()
========================================================
20、简单解释css的重绘与回流
	答:重绘:当一个元素自身的宽高,布局,和显示隐藏没有改变,只改变了元素
			外观风格的时候,就会产生重绘。
		回流:渲染树的一部分必须要更新且节点的尺寸发生了变化,会触发回流操作.
			每个页面至少在初始化的时候会有一次回流操作。
	    回流必将引起重绘,重绘不一定引起回流。
========================================================
21、箭头函数和普通函数的区别是什么?
	答:1.箭头函数是匿名函数,不能作为构造函数,不能使用new
		2.箭头函数不绑定arguments,取而代之用rest参数...解决
		3.箭头函数不绑定this,会捕获其所在的上下文的this,作为自己的this4.箭头函数通过call或apply方法调用一个函数时,只传入了一个参数,this并没有影响
		5。箭头函数没有原型属性
========================================================
22、解释bind、call与apply区别?作用
	 答:call 与 apply 的不同点:两者传入的列表形式不一样
		call可以传入多个参数;
		apply只能传入两个参数,所以其第二个参数往往是作为数组形式传入
		---------------------------
		共同点,都可以改变this
		从执行结果上来说,bind得到新函数。call和apply是立即去调用
		传参不同:bind、call传参数列表,apply是传参数组
		变量类型检查:Objcet.prototype.toString.call()
========================================================
23、简述computed的实现原理?
	答:当组件初始化computed和data会分别建立各自的响应系统,observer
			遍历data中每个属性设置 get/set数据拦截
		组件初始化computed会调用initComputed函数
		当某属性发生变化,触发set拦截函数,完成响应
========================================================
24、computed和watch有什么区别?分别运用的场景?
	答:computed是计算属性,用于简易计算处理,比如购物车商品结算
		watch是侦听属性,用于侦听值的变化,比如 搜索数据
========================================================
25、html5常用标签结构
	答:header、main、footer、aside、nav、section、article
========================================================
26、html常用的属性有哪些?
	答:id class  name  style type value 
========================================================
27、href和src的区别?
	答:请求资源不同、作用的结果不同、浏览器的解析方式不同
========================================================
28、link和@import的区别
	答:1.link是XHTML标签,除了可以加载css还可以定义rss,@import只能加载css
		2.link引入css页面载入时同时加载,@import需要页面完全载入后再加载
		3.link没有兼容问题,@import是css2.1提出,低版本不支持
		4.link支持javascript控制DOM改变样式,而@import不支持
========================================================
29、vue父子组件通信的方法?		
	答:父传子:父组件上:<子组件 自定义属性="值"/>
				子组件接收:props:["自定义属性1","自定义属性2"...],子组件{{自定义属性}}
				复杂写法:可以设置默认参数
					props:{
						自定义属性1:{type:number,default:"默认参数值"},//type内写对应类型
						自定义属性2:{type:string,default:"默认参数值2"},
					}
		子传父:子组件:通过$emit("事件名",)
				父组件:<Son @事件名="父组件定义的函数" />
					父组件定义的函数(data){data就是子组件传递的参数}
				例:子:created(){$emit("data","儿子给父亲")}
					父:<Son @data="fn"/>
						methods:{fn(data){//data就是传过来的值}}
========================================================
30、路由懒加载
	答:const routes=[
				{path:"/",component:()=>{import("组件地址")}}
			]//component就是路由懒加载的写法
========================================================
31、vue响应式原理?
	答:首先会在vue初始化将data内所有属性通过遍历,用Object.defineProperty
		劫持到,劫持到就知道数据什么时候发生变化。
		当数据发生变化后触发setset在数据变化后通知watch更新视图。
		watch是一个监听者,监听到变化后就会调用render函数更新视图
		更新视图是通过虚拟DOM节点,做到最小粒度更新
			--在更新视图过程中是需要编译template模板,编译的时候就会访问data
			里的数据,就会触发getget就会去做收集依赖的事情,当template中
			用到的数据告诉watch,然后进行render最小粒度渲染。
========================================================
31、vue内,原理劫持(Objcet.defineProperty)发生在created内
========================================================
32、因为Objcet.defineProperty不支持IE8以下,所以vue也是不支持的,因为vue就是
	Objcet.defineProperty写的
========================================================
33、vue响应式原理流程图
	答:1、vue2--Object.defineProperty劫持所有的属性
		   vue3--proxy
========================================================
34CSS hack
	答:CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器
		识别不同的符号,以达到应用不同的CSS样式的目的
========================================================
35、能继承的属性
	答:字体系列 font font-size font-style ...
		文本系列 内联 color line-height...
				块级 text-indent text-align
 ========================================================
36、你如何理解HTML结构的语义化?
	答:1.提升搜索引擎优化SEO的效果
		2.没有css也能很好呈现出内容结构、代码结构
		3.便于团队开发和维护,语义化更具可读性
		4.通常语义化会使代码变少,让页面加载更快
 ========================================================
37、Sprites精灵图
	答:1.可以很好的简述网页http请求
		2.减少图片字节
		3.解决图片命名困扰
		ps找到坐标,background-position进行对精灵图的定位使用
 ========================================================
38、居中一个div
	答:1.设置宽高 2.设置绝对定位 left:50%;top:50%; 
		3.margin-top:-高一半;margin-left:-宽一半;
 ========================================================
39this指向
	答:1.全局window	
		2.普通函数谁调用指向谁 
		3.对象方法谁调用指向谁 
		4.构造函数指向创建出来的实例对象 
		5.事件指向事件源
		6.定时器指向window	
		7.箭头函数指向上一级
 ========================================================
40、闭包
	答:含义:函数跨作用域访问变量形成闭包,一般这个函数和变量的总和
			就叫闭包。常见的闭包是父函数嵌套子函数,把子函数返回挂载在全局
		作用:私有化变量,避免全局污染。把变量封装在内部,对外暴漏钥匙(访问的接口)
			实现早期模块化
 ========================================================
41ES6新特性
	答:1.let const
		2.箭头函数
		3.模板字符串
		4.Promise
 ========================================================
42H5新特性
	答:1、语义化标签
		2、audio和video
		3.form表单
		4.local和session
		5.自定义属性data-*等等
 ========================================================
43、ajax readyState有几种状态,请说明他们分别对应的意思
	答:0	未初始化
		1	准备发送
		2	已经发送
		3	正在接收
		4	完成响应
 ========================================================
42、什么是闭包,如何使用它,为什么要使用它?优缺点,应用场景?
	答:函数的标识符跨作用域形成闭包
		写法1function fn(){	
			var num=1;			//函数内生成变量
			function fn1(){num++ return num}	//访问上一级变量,返回更改后的值
			return fn1		//返回函数内的函数
		}
		var fc=fn()		//函数返回出来的值用变量接收
		console.log(fc())
		写法2function fn(){
			var num=1;
				function fn2(){
					return num=num+1;	//返回更改后的值
				}
				window.fn2=fn2		//把函数挂载在window
			}
			fn()	//先调用外部函数
			console.log(fn2())	//然后调用内部函数
		闭包优点:避免全局变量污染
			缺点:会增大内存的使用量,使用不当会造成内存泄漏
		闭包应用场景:模块是闭包最强大的一个应用场景
  ========================================================
43、对WEB标准以及W3C的理解与认识?
	答:web标准是将 结构 表现 行为三部分独立分开,w3c对web标准提出规范
		要求:
		1 结构要求:标签闭合,标签字母小写,标签不允许随意嵌套
		2 对于css js来说尽量使用外链css和js。使结构表现行为分为三块
			符合规范,同时提高页面渲染速度,提高用户体验
  ========================================================
44、使用XHTML的局限性有哪些?
	答:必须有head、body每个dom必须要闭合,一些老浏览器不兼容
  ========================================================
45、描述reset	css文件的作用和使用它的好处?
	答:重置浏览器的css默认属性,不同浏览器有自己的默认样式,通过reset
		可以达到显示一致的效果。
  ========================================================
46、在IE6中遇到的bug和解决方法?
	答:ie6条件下有双倍的margin
		解决:给浮动元素增加display:inline
		图片底部有3像素问题
		解决:dispkay:block
  ========================================================
47、简述路由的2种常见跳转方式?
	答:<router-link to='/home'>
		this.$router.push('/home')
  ========================================================
48、vue中如何使用自定义组件?
	答:1、在view中创建自定义组件xxx.vue,并写入内容
		2、在模块中引入improt Xxx from "@/components/Xxx.vue"
		3、在模块中挂载,components:{Xxx}
		4、在页面引入<Xxx/>
  ========================================================
49、vue中keep-alive的作用?使用场景?
	答:缓存组件,应用在频繁切换,如tab切换,不重复渲染DOM,优化性能
		自身是一个抽象组件,自身不会渲染一个DOM元素,不会出现在父组件链中
	和v-show的区别是?
		show是有DOM节点改为了none,keep-alive根本没有DOM节点
  ========================================================
50、restful API是什么?怎么用?
	答:是一种互联网软件架构,后端用,和前端没什么关系
  ========================================================
51ES6新特性
	答:1let const
		2、箭头函数
		3、模板字符串
		4、Promise
		5、Async/Await
		6、模块化
		7、解构赋值
		8、拓展运算符
		ES6优势:1.命名冲突2.职责分离	解决
  ========================================================
52、列举vue中组件的属性以及常用指令?
	答:属性:computed、filters、methods、
		指令:v-for、v-if v-else v-else-if、v-show、v-model、v-on和v-bind
  ========================================================
53、请简述SPA单页面应用的优缺点,如何优化缺点?
	答:优点:1.局部渲染,有良好的交互体验
			 2.前后的职责分离,架构清晰
			 3.复合web2.0趋势
			 4.减轻服务器压力,服务器只需要提高数据
		缺点:1.首屏渲染时间长=》优化:预渲染
			  2.不利于seo=》优化:服务端渲染SSR
  ========================================================
54、vuex的属性,怎么使用?哪些功能场景使用vuex?	
	答:
		vuex 是一个管理交互状态的插件,只能和vue项目搭配使用
	采用集中式存储数据,使用创建store.js 来统一管理数据
		5大属性:state代表仓库数据本身
				mutations修改仓库数据的唯一方式
				getters仓库中的过滤
				actions异步修改仓库数据
				moudles合并仓库数据
		使用:1收到数据后,把数据丢给状态机
				this.$store.commit("LISI",{list:goodsList});
			 2页面接收仓库里的数据	//在computed内调用
			 	this.$store.state.键名 //这里是对象存储在vuex
  ========================================================
55、$router和$route的区别?
	答:$router这个对象中是一个全局对象,包含了所有路由包含了许多关键对象和属性
		$route表示当前路由信息对象
  ========================================================
56、请求拦截器是什么?相应拦截器是什么?
	答:请求拦截器:在发请求的时候统一发一些事情,比如 发请求的时候带token
		响应拦截器:响应后,统一对响应做一些操作
  ========================================================
57、router原理
	答:通过onhashchange监听地址栏hash值的改变通过配置的路由来跳转
  ========================================================
58、Promise、asyncawait分别是什么?
	答:Promise解决回调地狱(一个场景)
		asyncawait
			作用:解决异步代码问题,可控制异步代码的执行顺序
			用法:asunc写在函数前,await只能使用在async修饰的函数中,
				用于等到异步操作结果
		谈谈promise的理解?
			异步操作(ajax/定时器)这些进行管理的
		状态?
			进行中:pending
			已成功:fulfilled
			已

  ========================================================
59、原型和原型链?
	答:原型:
		1 每个函数都有一个属性protottype(原型)
		2 添加到原型上的属性和方法,被创建出来的实例对象共享
		3 实例的_proto_上面等于构造函数的prototype
		4 原型prototype上面还有一个属性constructor(构造器),指向构造函数本身
		原型链:
		每个构造函数的prototype也有自己的隐式原型,指向object,object向上找
			指向null
  ========================================================
60、cookies sessionStorage和localstorage区别
	答:cookies数据大小不能超过4K
		session和local可以达到5M或更大
		session会话存储:浏览器关闭就清除数据
		local本地存储:只有不手动删除数据,就一直在
		cookie设置的过期时间之前一直有效
			数据与服务器之间的交互方式:
				cookie的数据会自动传递到服务器,服务器也可以写cookie到客户端
				session和local数据仅存在本地
  ========================================================
61、position的常用值
	答:absolute	绝对定位	以父元素为准,脱离文本流
		fiexd		绝对定位	以浏览器为准,脱离文本流
		relative	相对定位 保留原有位置进行偏移
		static 默认值
  ========================================================
62、如何进行网站性能优化?
	答:1.减少http请求
		2.使用浏览器缓存
		3.启用压缩
		4.精灵图sprites
		5.减少cookies传输
  ========================================================
63、什么是优雅降级?渐进增强?
	答:优雅降级:是一开始针对一个高版本浏览器构建页面完成功能,然后针对不同
				浏览器测试,修复,保证低级浏览器也有基本功能
		渐进增强:是针对低版本浏览器构建页面,满足基本要求,然后针对高级浏览器
				进行追加
  ========================================================
64、socket连接过程三个步骤?
	答:客户端向服务端发送SYN(连接请求)
		服务器向客户端响应SYN
		客户端向服务器发送ACK(确认请求)
  ========================================================
65、link和@import的区别?
	答:1.link属性XHTML,除加载css外还用于定义RSS,@import只能加载css
		2.link加载的文件,在页面加载的时候,link文件会同时加载,@import
			是在页面加载完成再加载
		3.@importIE5以下不能识别,link无兼容问题
  ========================================================
66、vue中scss是什么?安装步骤?几大特性?
	答:scss是sass的一个升级版本,是css的预处理器
		yarn add sass-loader -S	//sass-loader依赖于node-sass
		yarn add node-sass -S
		在build文件夹下找到webpack.base.conf.js的rules里面添加配置
		{
			test:/\.scss$/,
			loaders:['style','css','sass']
		}
		使用在style样式加上 lang="scss"
		特性:1.嵌套
			  2.变量$开头
			  3.@mixin,通过@include引用
			  4.@extend .box 继承
			  5.@function send($a){@return $a*2}
			  	调用:60+{send(50)}
			  6.引用父元素&
			  	&::
			  7.计算功能,可以简单加减乘除
  ========================================================
67、vue-router导航钩子有哪些?有哪些参数?
	答:全局钩子beforeEach(to,from.next)
		to:从哪里来		from到哪里去		next放行
				aftrEach(to,from)
		路由独享导航钩子函数
			beforeEnter
		组件内部导航钩子函数
			1.beforeRouteEnter	//不能使用this
			2.beforeRouteUpdate	//只有路由发生改变才会触发
			3.beforeRouteLeave
  ========================================================
68、什么是ajax?为什么要用ajax?如何原生使用ajax?
	答:1ajax是与服务器交换数据并更新部分网页,而且不重新加载页面
		2为什么yongajax
			1,减轻服务器负担
			2,无刷新更新页面
			3,用户体验好
			4,兼容性好
		3.get	1.创建ajax引擎对象
				2.设置请求方式和发生数据地址
				3.监听请求和响应状态码
						post的话在这里加上 设置请求头
				4.发生数据	发送数据(设置参数)
  ========================================================
69、响应状态码status--http
	答:200 成功
		301 重定向
		304 缓存
		404 路径问题
		403 没有权限后端
		500 及以上 后端
  ========================================================
70、watchEffect与watch的区别
	答:watch需要传入侦听的数据源,而watchEffect是自动收集数据源作为依赖
		watch可以访问侦听状态变化前后的值,watchEffect只获取改变后的值
		watch是数学改变的时候执行,watchEffect默认执行一次,属性改变也会执行
  ========================================================
71、常见的浏览器内核?
	答:Trident  //IE代表
		Gecko	//火狐
		WebKit	//苹果浏览器
		Opera	//欧朋
 ========================================================
72MVVMMVC的区别?
	答:MVVM是模型、视图、视图模型
		MVC是模型、视图、控制器
 ========================================================
73、vue中key的作用?
	答:当相同标签名的标签名切换,需要通过key特性设置唯一的值来标记让vue
		区分他们,否则vue为了效率会替换相同标签内部的内容
 ========================================================
74、vue的优点是什么?
	答:双向数据绑定、组件化、数据结构分离、虚拟DOM、运行速度快
 ========================================================
75、css3兼容问题?
	答:属性前加私有前缀
		-webkit-  以webkit做内核的浏览器(chrome,safri)
		-ms-      IE
		-moz-     火狐
		-o-       opera(手机)
 ========================================================
76、qs?
	答:java写不用转,其它老的语言php、node.js写的需要用qs.stringify()转换一次,不然传不过去,不然拿不到参数。安装axios后自动就会有qs
 ========================================================
78、$nextTick
	答:vue是异步渲染的,data改变后DOM不会立刻渲染。
		$nextTick会在DOM渲染之后被触发,以获取最新DOM节点
 ========================================================

79、vue3
	答:
 ========================================================

80、slot插槽、作用域插槽、具名插槽
	答:slot:把父组件的内容插在子组件里,用slot接一下
			  父组件内的值会覆盖子组件内slot的值
		作用域插槽:父组件里面取到子组件的数据,用template
		具名插槽:父组件用template包裹要插入的值,v-slot:取个名
				子组件name接收,如果没有定义接收,就对应到没有命名的slot里面
 ========================================================
81、动态组件
	答:<component :is="组件变量">  </component>
		在data里面写 组件变量:'要使用的组件名'
		这就是动态组件,用于组件类型不确定的时候
 ========================================================
82、异步组件
	答:import()函数,按需加载,异步加载大组件,不点不加载
		组件最开始设置为v-if false组件加载里面写入:组件名:()=>import('组件地址')
 ========================================================
 83、mixin  vue如何实现组件的逻辑复用?
 	答:用mixin组件逻辑复用,但是有缺点
 		变量来源不明确,不利于阅读,多mixin可能会造成命名冲突
 		mixin和组件可能会出现多对多的关系,复杂度较高
 		Vue3的composition API解决这些问题
 ========================================================
84、vue-router路由模式
	答:2种路由模式
		hash模式   history模式
		利用HTML5的history.pushState API来完成URL跳转而无需重新加载页面
		需要服务器端支持,无论访问什么路径 服务器端都返回index.html这个文件
			这种方案下前端要用路由配置404页面
 ========================================================
85、webpack和gulp的区别?
	答:面向配置和面向过程
		gulp:是面向文件处理过程的写法
		webpack:主要就是配置好配置项:entry入口、output出口、配loaders(压缩。合并。混淆),devServer配置本地服务器
 ========================================================
86、数组的常用方法?
	答:元素操作:push/shift/unshift/pop/splice
		遍历方法:map/forEach/every/some/filter
		查找方法:find/findIndex/indexOf/includes
		排序方法:sort/reverse
		拼接方法:concat
		转字符串:join
		----------------
		for/forEach/map的区别?
		forEach返回值
		map返回新数组
		for循环可以breadk调,forEach和map没法打断
 ========================================================
87、谈谈对作用域的理解?
	答:标识符所能访问的范围
		作用域有一个作用域链,他是用来帮助查找变量的,先找当前作用域找,找不到就往外层找,直到找到全局作用域window
 ========================================================
88、箭头函数和一般函数的区别?
	答:this指向不同,箭头函数中的this指向定义它时所处的作用域(上一级)
		详解:  1.全局:window 
				2.普通函数:谁调用,指向谁  
				3.对象方法:谁调用,指向谁 
				4.构造函数:创建出来的实例对象 
				5.事件:事件源 
				6.定时器:window 
				7.箭头函数:上一级。
 ========================================================
89、谈谈对闭包的理解?
	答:跨作用域访问变量
		如:父函数嵌套子函数,子函数访问父函数中的变量,就是跨作用域了,形成闭包
			闭包是:【函数】+【(函数内部跨作用域访问的)变量】
		闭包的作用:
			1.保存变量不被释放
			2.实现简单的模块化
			3.私有化变量
		闭包的缺点:不能滥用,避免内存泄漏
 ========================================================
90、原型与原型链?
	答:原型的相关属性:
		prototype:构造函数.prototype,是个对象,里面有被各个实例所共享的属性和方法
		constructor:原型.constructor,指向构造函数
		_proto_:实例上有_proto_,指向它所对应的原型
		new 构造函数得到实例对象
		原型的作用:原型上有可以被各个实例所共享的属性和方法
		原型链的形成:	
			实例上的_proto_属性,指向他对应的原型,它的原型又可以是其他构造函数创建出来
			的实例,(_proto_)它也有它对应的原型。这种关系层层递进,组成的链式结构就是原型链
		原型链作用:查找属性和方法,先在对象自身上找,找不到就沿着原型链往上找,能找到Object.prototype
 ========================================================
91、对象的深浅拷贝
	答:浅拷贝:只拷贝一层,遇到引用类型数据属性,拷贝地址
		深拷贝:无线层级的拷贝,新旧对象互不影响
		工作中常用:_.cloneDeep()	Lodash工具库,处理数据结构
		手写深拷贝:
			1.进行类型判断
			2.区分数组还是对象(for-in 遍历效率低,因为它能遍历原型链的属性)
				如果是数组,用forEach(小点:forwhile语句执行效率优于forEach)
				如果是对象,用Objcet.keys()转成数组去遍历
 ========================================================
92、webpack打包
	答:webpack进行文件的合并、压缩、混淆。本质上都是进行文件的处理(编译)
		webpack和他的各自loader都是用node.js写的
		Node.js提供了2种能力
		1.处理文件(fs模块),进行文件读和写
		2.处理网络请求(http模块)
 ========================================================
93、ts typescript了解  静态类型检测工具
	答:更严谨,TS是js的超集,里面有类型系统,进行类型注解	
		function fn(num:number):boolean{
			return Boolean(num)
		}
	TS的好处(价值)
		1.提供了类型系统,更严谨,代码即是文档
		2.提前发现问题(编译阶段就发现问题改正)
 ========================================================
94、babel
	答:webpack里可以配,将ES6ES5,是js的编译器
 ========================================================
95
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值