1. 为什么data是函数?
因为是对象的话,多处引用,修改一个组件的值,其他组件的值也会发送改变,所有用返回对象的函数,每一次返回的都是object实例,因为存储地址不同,所以不会发送以上的问题
2. this指向?
普通函数中如果没有调用this, 那么他就指向window 在严格模式中就指向undefined
函数中有多个对象时即使这个函数是被最外层的对象调用那this也还是指向上一级对象
箭头函数中不绑定this所以它会捕获上下文的this值作为自己的值
1.在全局中this指向window
2.直接调用函数this指向window
3.事件处理函数中this指向绑定事件的元素
4.obj.fn(); fn函数中this指向obj
5.回调函数中this指向window
6.构造函数中this指向实例化对象
3. 面向对象编程与面向过程的区别:
1)面向对象编程(面向对象特点: 封装 继承 多态 ):
1.面向对象编程是一个基于现实世界模型的一种编程方法
2.将属性抽象成一个对象,在这个对象上创建属性和方法
3.把函数封装变为对对象的封装
ps:创建对象的方法六种:
1.直接给对象绑定属性和方法
2.通过字面量方式创建
3.工厂函数 4.构造函数模式 5.原型模式 6.混合模式
2)面向过程编程:
分析实现效果的步骤,然后按照步骤用函数一步一步实现
ps:构造函数模式与工厂函数的区别:
工厂函数return返回 方法不一样
4. proto与prototype的关系/区别:
__proto__是隐式原型
prototype是显示原型:用来实现基于原型的继承与属性的共享
可通过Object.getPrototypeOf()标准方法访问该属性),指向构造函数的原型对象。
5. 原型链:
每一个对象都要自己的原型_proto_ , 这个原型也有他自身的原型对象prototype ,以此类推, 上升到了object.prototype, 而object.prototype的_proto_是null , null没有属性和方法, 原型链尽头是null.
5.面向对象的继承
原型继承 构造函数继承 实例继承 组合继承 寄生组合继承 class类继承
6.闭包原理:
函数中的函数读取函数内部的变量
优点: 1.能够读取函数内部的变量. 2.让这些变量一直存在于内存中,不会在调用结束后,被垃圾回收机制回收
缺点: 因为闭包会使函数中的变量保存在内存中,内存消耗大,所以不能滥用闭包
解决办法: 退出函数前,将不使用的局部变量删除
7. 构造函数原理
构造函数是一种特殊方法,用于初始化对象.在类的对象创建时,构造函数将被调用
优点: 能够通过instanceof识别对象
缺点: 每次实例化一个对象,都会把属性和方法复制一遍
解决办法: 把对象的方法指向同一个全局函数 通过原型对象(prototype),把方法写在构造函数的原型上
8. 回调函数
回调函数是一段可执行的代码段它作为一个参数传递给其他的代码
其作用是在需要的时候方便调用这段(回调函数)代码
优点: 简单,容易理解和实现
缺点: 不利于代码的阅读和维护,各个部分之间高度耦合(coupling)使得程序结构混乱,流程难以追踪,每个任务只能指定一个回调函数
9.说一说你对promise的理解。
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
Promise有哪些状态。 答:有三个状态:pending : 等待 fullfilled(resolved) :成功 rejected: 失败
所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
Promise.all(),一个失败后,其他的还返回吗? 答:不会返回,promise.all()失败的时候只返回最先被reject失败状态的那个实例对象的值
Promise.all()、Promise.race()区别? 答:两者都是可以同时调用多个promise实现,Promise.all可以将多个实例组装成一个新的实例,成功的时候返回一个成功数组,失败的时候则返回最先被reject失败状态的值;其中有一个实例不成功则返回reject; race()是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪个获取的快,就返回哪个结果,不管结果本身是成功还是失败
10.简单说一下async/await的了解?(****)(请参考https://www.jianshu.com/p/fd6933ff6b81)
答:async/await是写异步代码的新方式,它是generator的语法糖,以前的方法有回调函数和 Promise。async/await是基于Promise实现的,它不能用于普通的回调函数。 async/await与Promise一样,是非阻塞的。async/await使得异步代码看起来像同步代码,这正是它的魔力所在。单一的 Promise 链并不能发现 async/await 的优势, 但是,如果需要处理由多个 Promise 组成的 then 链的时候,优势就能体现出来了
11.Async&await和promise有什么区别?(参考https://www.jianshu.com/p/51f5fd21588e)
答: (1)函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会引式返回一个promise
(2)简洁:使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promise的resolve的值,不需要定义多余的data变量,还避免了嵌套代码。
(3)async/await让try/catch 可以同时处理同步和异步错误。try/catch不能处理JSON.parse的错误,因为他在promise中。此时需要.catch,这样的错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂
(4)async/await能够使得代码调试更简单
12、写出本地存储和cookie的区别
本地存储: 可以设置有效期限 存储空间只有4KB左右
cookie优缺点
cookie机制将信息存储于浏览器,因此可以作为跨页面全局变量,这是它最大的一个优点
常用场合:(1)保存用户登录状态;(2)跟踪用户行为.等等
cookie的缺点<