1. vue的生命周期执行
1.1 vue生命周期是什么?
每个组件都是独立的,每个组件都有自己的生命周期,从一个组件创建,数据初始化,挂载,更新,销毁,就是整个的生命周期。
具体的方法有:
beforeCreate:在实例初始化之后,data observer和事件配置之前被调用
created: data已经初始化,计算属性,event/watch事件回调,但是dom并没有挂载
beforeMount: 在挂载前被调用,render函数收藏被调用生成虚拟dom
mounted: 挂载完成,dom树已经生成,渲染到页面,可以进行dom操作
beforeUpdate: 数据有更新时调用
updated: 虚拟dom重新渲染
beforeDestroy: 销毁之前调用,还可以访问实例的数据
destroyed: 销毁后调用(watch,子组件监听器都已经清除)
1.2 vue的生命周期以及每个周期干了什么?
export default {
data () {
return {
rendered: false,
}
},
beforeCreate(){
console.log(this.rendered,'beforeCeate rendered'); //undefined
},
created() {
console.log(this.$el,'created el');//undefined
console.log(this.rendered,'created rendered'); // false
},
beforeMount() {
console.log(this.$el,'beforeMount el');//undefined
},
mounted() {
console.log(this.$el,'mounted el');
},
}
1.3 vue中内置的方法 属性和vue生命周期的运行顺序(methods、computed、data、watch)
props => methods =>data => computed => watch; 懂了没
1.4 父子组件的生命周期调用
加载渲染过程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
子组件更新过程
父beforeUpdate->子beforeUpdate->子updated->父updated
父组件更新过程
父beforeUpdate->父updated
销毁过程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
2. 事件循环
宏任务主要包含:script( 整体代码)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 环境)
微任务主要包含:Promise、MutaionObserver、process.nextTick(Node.js 环境)
task分为两大类, 分别是 Macro Task (宏任务)和 Micro Task(微任务), 并且每个宏任务结束后, 都要清空所有的微任务,
3. 原型链
4. 代码输出题1
console.log ('1')
setTimeout(function{
console.log('2')
}, 0)
new Promise(resolve => {
console.log('3')
resolve()
console.log('4');
})
.then(function() {
console.log('5')
})
.then(function() {
console.log('6')
})
console.log('7');
1,3,4,7,5,6,2
5. 代码输出题2
setTimeout(() => {
console.log('timer1')
Promise.resolve().then(function() {
console.log('promise1')
})
}, 0)
setTimeout(() => {
console.log('timer2')
Promise.resolve().then(function() {
console.log('promise2')
})
}, 0)
timer1 promise1 timer2 promise2
6. 代码输出题3
var a = {}
a.__proto__ === Object.prototype
Object.prototype.__proto__ === null
function b(){}
b.__proto__ === Function.prototype
Function.prototype.__proto__ === Object.prototype
b.proptype = {
color: 'red'
}
function b() { }
b.proptype = {
color: 'red'
}
c = new b()
// console.log(c)
// console.log(c.color) // red
c.color = 'blue'
console.log(c) // b { color: 'blue' }
console.log(b) // [Function: b] { proptype: { color: 'red' } }
// console.log(b.proptype.color) // red
7. 代码
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
“” // true
“(” // false
“]” // false
“()” // true
“()[]{}” // true
“(]” // false
“([)]” //false
var isValid = function (s) {
let stack = []
for(let str of s) {
if (str === "(") {
stack.push(")")
} else if (str === "[") {
stack.push("]")
} else if (str === "{") {
stack.push("}")
} else {
if(str !== stack.pop()) return false
}
}
return stack.length > 0 ? false : true
};