1.Vue的双向数据绑定原理
Vue内部通过 Object.denfineProperty的方法进行数据拦截,把data对象里的每一个数据的读写转化成getter/setter的方式,当数据变化的时候,视图也随之变化。
2.Vue与React的区别
- 相同点:
- 都是组件化开发,模式都是虚拟DOM
- 都支持props进行父子组件之间的通信
- 都是数据驱动视图的方式,不直接操作真实的DOM
- 都支持服务器渲染
- 不同点:
- 数据绑定:vue是双向数据绑定的方式 ; React是单向数据绑定的方式
- 组件写法:vue是基于webpack+vue-loader的单文件格式; React则是JSX的写法,就是把CSS,HTML,JS全部写进javascript里面
- state对象的不同:vue中state对象不是必须的,数据是由data属性在vue对象中处理 ; React中state是不可变的,需要用setstate的方法去更新状态
- 模式的区别:React严格来说是针对MVC中的view层,Vue则是MVVM的模式
3.MVC与MVVM的区别
- MVC:主要是后端的分层开发四思想,把一个完整的项目分成三个部分 M即model,是数据层,主要负责数据库的操作 V即view,是视图层,所有的前端页面都称之为view层 C即controller,是业务逻辑层,主要负责处理对应的业务逻辑,是(核心)
- MVVM:主要是前端页面的分层开发思想,主要关注于视图层的分离 M即model,是页面中用到的数据 V即view,是页面的HTML结构 VN即viewmodel,是相当于一个中间的的调度者,提供了双向数据绑定的原理
4. jsonp,服务器代理,跨域(一起总结)
因为浏览器的同源策略,限制了网页之间的资源访问权限,浏览器为了安全起见,弄了个这个东西,就是 协议、域名、子域名、端口、也有可能系统平台不同,也会引起跨域问题。
解决跨域问题,就是要绕过浏览器的同源策略,去请求访问其他网页的资源信息。
JSONP跨域
用一个script标签,去借助src去引入外部的一个资源,动态生成这个script标签,页面加载的时候触发script标签上的回调函数,通过这个回调函数拿到数据。
要是返回的是json数据格式,就按json解析,要是字符串,就先用JSON.parse()转化然后再拿出来。
其实有很多方法解决跨域问题,就比如你前端比较着急,但是后端有现在赶不及,最暴力的就是服务器代理,可以用Node中的express搭建一个服务器,做一个中转,然后我这边请求你的接口,做一个中专转发完以后我这个服务器拿到你的数据。
CORS跨域
如果想要绕过浏览器“同源策略”,实现使用AJAX技术跨域获取资源,需要服务端和客户端的协同合作。而对于CORS标准而言,实现AJAX跨域获取资源,重点还在于服务器端返回的响应是否清楚的告知了浏览器此次跨域AJAX请求的合法性。
请求方法只属于HEAD,GET,POST请求的其中一种; HTTP的头信息只限于以下字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type(application/x-www-form-urlencoded、multipart/form-data、text/plain)
5.作用域有哪些
- ES5中的作用域:
- 全局变量:在函数外部的变量,在代码任何地方都能访问到,就是全局作用域么 什么window对象了,未定义直接赋值。
- 局部变量:生命在函数内部的变量么,就是局部作用域也叫函数作用域。
- ES6提供了新的叫块级作用域,通过let和const来体现了
6.let和var和const的区别
- Var:可以声明提前,可以被覆盖
- Let:不可以生命提前,而且不会被覆盖,说白了就是声明过在声明就会报错
- Const:这个就相当于什么呢,这个一旦被赋值了就无法再更改
7.for循环里用let和var有什么区别
For每次循环都是不同的块级作用域啊,let声明变量是块级作用域的,所以不存在重复声明的问题。最大的就是索引问题吧,用var还得给个index,用let就不用
8.v-for为什么写key
因为vue组件是高度复用增加key可以标记唯一性,为了更好区别各个组件,作用就是为了搞笑的更新虚拟DOM呗
9.promise怎么用
主要用于异步中,主要是将异步操作队列话,(讲故事···(匹萨案例)),在promise没出来的时候,我们通常都是嵌套的回调函数来解决问题,简单点还好,但是如果复杂呢,就形成了回调地狱的问题,然而他的链式调用就完美的解决了这个问题。
10.页面的性能优化
常见的也就是资源压缩合并啊,减少HTTP请求;然后异步加载吧;利用浏览器的缓存啊;NDS的预加载啊;减少dom的操作啊
11.介绍一下缓存
浏览器缓存包含很多啊,什么http缓存了,cookie,localastorage,sessionstorage等,想这些都是存在硬盘上面的,硬盘读写肯定有限制,但是存在变量里也是可以的,就是存内存里,就是内存和硬盘里空间换时间的问题,现在主流框架vue,react,所到底jsx其实也是这么做的。 ”茹埃蒂斯”(后端),后端区别于数据库的东西,数据库放硬盘,但是他放内存,
- 优点:速度快是优势,可以做有效期,比如优惠卷有时效性,但是实际上在数据库是做不到的;
- 缺点:不可以存数组对象,只能转换成字符串,断电可能就没了,但是现在可能断电也可以的,可能存在硬盘上
12.防抖和节流
- 防抖:就是比如有人无聊点来点去很频繁的操作,这个时候防抖就有用了,就是把频繁的操作合并成一次去执行,在指定时间内就执行一次,如果时间到了才能执行下一次,只执行最后一次
- 节流:指定时间间隔只会执行一次。只执行第一次 两者很相似,但是说明白点就是,防抖是需要等多久才能触发一次;节流是多久时间只能触发一次