从面试中查漏补缺
工作以来换了几个地方,这次打算认真找一个合适的公司。总结一下部分最近遇到的面试题
1.宏队列和微队列
宏队列:dom事件回调、ajax回调、定时器回调
微队列:promise回调、mutation回调
执行时下一个宏队列时会先执行微队列。
const first = () => (new Promise((resolve, reject)=>{ console.log(3); let p = new Promise((resolve, reject)=>{ console.log(7); setTimeout(() => { console.log(5) resolve(6) }, 0); resolve(1); }) resolve(2); p.then(value=>{ console.log(value) }) })) first().then(value=>{ console.log(value) }) console.log(4); 输出结果为:3 7 4 1 2 5
2.闭包
用途:函数传参
函数防抖,
封装私有变量,
作为回调
定义行为,然后把它关联到某个用户事件上(点击或者按键)。代码通常会作为一个回调(事件触发时调用的函数)绑定到事件。
<body> < a href=" " id="size-12">12</ a> < a href="#" id="size-20">20</ a> < a href="#" id="size-30">30</ a> <script type="text/javascript"> function changeSize(size){ return function(){ document.body.style.fontSize = size + 'px'; }; } var size12 = changeSize(12); var size14 = changeSize(20); var size16 = changeSize(30); document.getElementById('size-12').onclick = size12; document.getElementById('size-20').onclick = size14; document.getElementById('size-30').onclick = size16; </script> </body> </html>
优点:
1.保护函数内的变量安全,加强了封装性
2.在内存中维持一个变量(用的太多就变成了缺点,占内存)
闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖a中的变量。
缺点:会占用大量内存,
3.深拷贝和浅拷贝
浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存。
4.promise
5.指向与强制更改指向(call,apply,bind)
6.判断一个对象是否为数组
1.通过instanceof判断
let a = []; a instanceof Array; //true let b = {}; b instanceof Array; //false
2.Object.prototype.toString().call()获取到对象的不同类型
3.Array.isArray()
7. css画三角形(设置border属性即可)
8.立即执行函数
9.$.ref
1、ref 加在普通的元素上,用this.ref.name 获取到的是dom元素
2、ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法。
3、如何利用 v-for 和 ref 获取一组数组或者dom 节点(ref是作为渲染结果被创建的,所以在初始渲染时ref并不能被访问$ref也不是响应式的
ref 需要在dom渲染完成后才会有,在使用的时候确保dom已经渲染完成。比如在生命周期 mounted(){} 钩子中调用,或者在 this.$nextTick(()=>{}) 中调用。
如果ref 是循环出来的,有多个重名,那么ref的值会是一个数组 ,此时要拿到单个的ref 只需要循环就可以了。)
10.async await 和promise的区别
1.首先,两者都是异步编程的解决方案,但是async await是基于promise实现的
2.promise的出现是为了解决callback回调地狱问题,但是它的写法会纵向排列为一个回调链,遇到复杂场景美观性要差一些,而async await写法上则类似与同步的写法,使异步代码看起来像是同步代码。
相同之处:
1. 都是非阻塞性的。
2.都是异步操作。
11. vuex中存储数据和cookie等存储方式的应用场景
vuex中数据存储在store中,数据是响应式的,数据有变动时会实时更新。
而cookie和sessionstorage中的数据读取较慢,并且store的数据会在页面关闭时消失,而sessionstorage则需要关闭浏览器页面。
12....