1.js实现promise

1.promise和async/await的区别

函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会引式返回一个promise,改promise的resolve值就是函数return的值。
简洁:使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promise的resolve的值,不需要定义多余的data变量,还避免了嵌套代码。
async/await让try/catch 可以同时处理同步和异步错误。try/catch不能处理JSON.parse的错误,因为他在promise中。此时需要.catch,这样的错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂

1.什么是promise,解决了什么问题

Promise 概括来说是对异步的执行结果的描述对象
Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了。
解决回调地狱(Callback Hell)问题

由于Promise只能被决议一次,且决议之后无法改变,所以,即便是多次回调,也不会影响结果,决议之后的调用都会被忽略。

 

1.async的返回值是什么

1.async函数的返回值是Promise对象,可以用then方法指定下一步的操作。async函数可以看做多个异步操作,包装成一个Promise对象,await命令就是内部then命令的语法糖。

2.async函数返回一个Promise对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体后面的语句。

2.vue data为什么是一个函数  

组件是可复用的vue实例,一个组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件中的data数据都应该是相互隔离,互不影响的,基于这一理念,组件每复用一次,
data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其他复用地方组件的data数据不受影响

总结:组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。
而单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果。

3.写一个ES5继承和ES6继承

面试总结(2019年12月20日)
//组合继承
function Supertype(name){
    this.name = name;
    this.colors = ["red","green","blue"];
}
​
Supertype.prototype.sayName = function(){
    console.log(this.name);
};
​
function Subtype(name,age){
    \\继承属性
    Supertype.call(this,name);
    this.age  = age;
}
​
\\继承方法
Subtype.prototype = new Supertype();
Subtype.prototype.constructor = Subtype;
Subtype.prototype.sayAge = function(){
    console.log(this.age);
};
​
var instance1 = new Subtype('Annika',21);

//构造函数继承
缺点:方法都在构造函数中定义,函数无法复用

在超类型中定义的方法,子类型不可见,结果所有类型都只能使用构造函数模式

function Supertype(name){
    this.name = name;
}
​
function Subtype(){
    Supertype.call(this,'Annika');
    this.age  = 21;
}
​
var instance = new Subtype;
console.log(instance.name);  \\Annika
console.log(instance.age);   \\29
View Code

相关文章: