面经
话不多说,直接上题
题目:

1.h5新增的标签有哪些,为什么要加强语义化?
答:html5增加了<main><header><footer><aside><section><video><audio><time><data>之类的语义化标签, 搜索引擎会利用爬虫分析抓取页面结构内容,有利于SEO,页面结构更加清晰,利于维护.提高页面可访问性,不会在样式加载不正常的时候一团乱,维持基本结构。利于部分残障人士页面阅读器解析
2.为什么要清除浮动,怎么清除浮动?
答:浮动脱离了正常文档流,会导致父元素高度塌陷,后面元素会挤到浮动元素下方,造成布局错乱。清除浮动:1.父元素创建BFC,使其处于单独的块级渲染区域 overflow不为visible,float不为none,display值为flex grid inline-box table, position为absolute或fixed都可以创建。2.父元素的伪元素::after display:block,heght:0,visbility:hidden,clear:both,content:'.'
3.行内元素,块元素有哪些?它们有什么不同?
答:行元素无法设置宽高,行排布,不够换行 a b span img input button label, 块元素独占一行,可以设置宽高 p div ul ol form table , 还有空元素:link br hr等
4.现在有哪几种存储数据的方式,它们分别有什么不同?
答:cookie sessionStorage localStorage indexDb,cookie按设定的时间内有效,最多4k, 两个storage都是html5新api,存储键值对,sessionStorage会话存储,页面访问时间内有效,关闭页面失效,localStorage一直有效,关闭页面不会失效,两个都是最大5M,indexdb也是h5新api,浏览器内置小型数据库。
5.程序题for(i=0;i<10;i++){setTimeout(function(){console.log(i)},10)}
答:考变量提升和作用域,i先增加到了10,setTimeout为宏任务,10ms后宏任务里陆续增加了10个function(){log(i)}回调,10次事件循环每次把一个宏任务取到栈里,执行打印i, 10次10
6.vue实现双向绑定的原理是什么
答:Vue双向绑定 vm视图模型简单来说就是利用了Object.defineProperty(),通过劫持setter,实现model到view,view到model则是一堆事件监听 输入框的input,选择组件的 change等等。具体复杂些的实现就要看观察订阅设计模式了
7.Vue之间组件是怎么传值的
答:父->子:props, 子->父: 子:emit,父 on,兄弟之间: 利用一个事件中央总线bus
8.让两个组件实现按点击次序执行请求
答:可能是: 全局一个promise实例,不同按钮点击:在实例then后返回新的不同promise连接到全局promise,应该可以保证顺序吧。。
9.怎么实现文本不自动换行,超出文本的部分变成省略号
答:white-space:nowrap; overflow:hidden;text-overflow:ellipsis;
10.vue的生命周期有哪些,分别有什么不同
答:简单说:几个钩子函数created,mounted,updated,destroyed 再加上四个before,created时data绑定,el不可见。beforemount调用render,实例添加$el替换el后调用mounted,数据更新触发视图渲染则调用两个update,销毁实例之前调用beforedestroy。
11.跨域的原理有哪些,jsonp的原理是什么?
答:跨域浏览器安全策略造成,非同协议,源,端口 皆为跨域,为了避免csrf跨域请求伪造,请求会被浏览器拦截。
实现跨域请求:jsonp ,后端设置CORS, 各种代理 像nginx,node中间件。跨域访问dom:Window.postMessage, document.domain,iframe
jsonp原理:利用script不受同源政策限制,将请求模拟成script标签请求,写入callback回调函数,后台将结果用callback包装返回,回调函数即可得到数据,,不过jsonp只支持get请求</data></time></audio></video></section></aside></footer></header></main>