一、vue组件中data为什么必须是一个函数?
这是由于JavaScript
的特性导致的,在component
中,data
必须是以函数的形式存在,不可以是对象。
在组件中的data
写出一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data
,相当于每个组件实例都有自己私有的数据空间,他们只需要负责维护各自的数据,不会造成混乱。而单纯写成对象形式的话,就是所有的组件实例共用一个data
,这样改一个全都改了。
二、请说下封装 vue
组件的过程?
- 首先建立组件的模板,先把架子搭起来,然后考虑好组件的样式和基本逻辑结构。
- 准备好组件的数据输入,即分析好逻辑,确定好
props
里面的数据、类型 - 准备好组件的数据输出,即根据组件逻辑,做好要暴露出来的方法
- 封装完毕后,直接调用即可。
三、为什么使用React
,React
有那些优势?
React
速度很快:它并不直接对DOM
进行操作,而是引入一个叫做虚拟DOM的概念,安插在JavaScript
逻辑和实际的DOM
之间,所以性能比较好- 跨浏览器兼容:虚拟
DOM
帮助我们解决了跨浏览器问题,它为我们提供了标准化的API,甚至可以在IE8中使用 - 一切都是component:代码更加模块化,重用代码更容易,代码可维护性更高
- 单向数据流:
Flux
是一个用于在JavaScript
应用中创建单向数据层的架构,它随着React
视图库的开发而被Facebook
概念化 - 同构、纯粹的
JavaScript
:因为搜索引擎的爬虫程序依赖的是服务端响应,而不是JavaScript
的执行,所以预渲染应用有助于搜索引擎的优化 - 兼容性好加粗样式:比如使用
RequireJS
来加载和打包,而Browserify
和Webpack
适用于构建大型应用。他们使得那些艰难的任务变得简单化。
四、说一下浏览器 cookie
和 session
的认识。
session
是基于cookie
实现的。cookie
保存在客户端浏览器中,而session
是保存在服务器上;cookie
的机制是通过检查客户身上的通行证来确定用户的身份,session
的机制就是通过检查服务器上的客户表来确定客户的身份;session
相当于在服务器上建立一份客户档案,客户来访问的时候只需要通过查询客户表就可以了。cookie
和session
的区别:
- 存放的位置:
cookie
是存在与客户端的临时文件夹中;session
是存在于服务器的内存中,一个session
域对象为一个用户浏览器服务。 - 安全性:
cookie
是以明文的方式存放在客户端上,安全性比较低,但是可以通过一个加密算法进行加密后存放;session
是存放在服务器的内存中,所以安全性比较好。 - 生命周期:
cookie
的生命周期是通过设置有效时间来进行累计的,从创建开始计时,有效时间结束即cookie
生命周期结束;session
的生命周期是间隔的,从创建时开始计时,如果在有效时间内没有被访问,那么session
的生命周期就会被销毁,但是如果在这个时间内访问过,那么将重新计算session
的生命周期。关机会造成session
生命周期的结束,但是对cookie
没有影响。 - 访问范围:
cookie
为多个用户浏览器共享;session
为一个用户浏览器独享。
五、DOM
事件有哪些阶段?谈谈对事件代理的理解?
-
DOM
事件分为三大阶段:- 捕获阶段(事件从
Document
节点自上而下向目标节点传播的阶段) - 目标阶段(真正的目标节点正在处理事件的阶段)
- 冒泡阶段(事件从目标节点自下而上向
Document
节点传播的阶段)
- 捕获阶段(事件从
-
事件代理简单来说就是:事件不直接绑定到某个元素上,而是绑定到该元素的父元素上,进行触发事件操作时,在通过条件进行判断,执行事件触发后的语句。
-
事件代理的好处:(1)使代码更简洁;(2)节省内存开销;
六、你能描述一下渐进增强和优雅降级之间的不同吗?
- 渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能实现,然后再针对高版本浏览器进行效果、交互等改进和追加功能,达到更好的用户体验。
- 优雅降级:是从一开始就构建一套完整的功能,然后在针对低版本浏览器进行兼容处理。
- 区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,意味着往回看;而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要,意味着朝前看,同时保证其根基处于安全地带。
- 其实使用这两种设计范例的人都有其各自的观点:
- 渐进增强的观点认为应该关注内容的本身,不管建立网站的原因是什么,他们所有的相同点都是基于内容的,所以渐进增强成为一种更为合理的设计范例,这也是他被
yahoo
采纳并且构建的原因。 - 而优雅降级的观点认为应该针对那些最高级、最完善的浏览器来设计网站,那些被认为过时了的或者是有功能缺失的浏览器的测试工作应该安排在开发周期的最后阶段,并且把测试对象限定为主流浏览器的前一个版本。所以在这种设计范例下,旧版的浏览器就被认为仅能提供 “简陋却无妨” 的浏览体验。
- 渐进增强的观点认为应该关注内容的本身,不管建立网站的原因是什么,他们所有的相同点都是基于内容的,所以渐进增强成为一种更为合理的设计范例,这也是他被