最近在公司闲来无事,就老是翻一翻网络上大佬的博客看看大佬们,平时面试遇到的问题,这不看不知道一看真的是吓我一跳!!!平时上班的我总是觉得什么都是So simple~~~,看完之后我觉得我真的是个码农,甚至怀疑我当初面试,面试官是不是故意挑着简单的问我,不过我仔细想想也是,我之前就是个实习生,要是太难面试官也知道我不会。所以我就将这些我看到的面试题整理出来和大家一起分享下我学习后得到的见解,希望能帮到大家。
在我们的js的作用域链中的内部的函数,是可以调用外部函数作用域定义的变量的,当我们调用外部函数返回的是一个内部函数这时候就是一个闭包了,这时候虽然外部的函数执行完毕了,但是内部定义的变量依旧因为作用域链,在我们的内部函数中能够访问到。
在以前我们写一个库是需要考虑变量冲突的问题,因为可能其他库也是用这个变量,比如我们以前经常使用的jquery,他就是采用了闭包将其内部的熟悉全部定义再起内部,不会与外部的变量冲突,感兴趣的同学可以去看下jquery源码。
我们学过后端的同学应该知道在后端是可以定义私有属性的,但是在我们的前端是没办法直接在构造函数中实现的,这时候闭包就可以帮我们解决这个问题,我们知道闭包中外部调用函数内的变量只能在返回的函数中使用,达到私有属性的效果。
函数柯里化就不在本章节内细说了,感兴趣的同学我会在后面给出见解。
首先我们要知道浏览器在内部其实就像死循环一样会去迭代我们的任务队列,发现队列中有新任务就会去马上的执行,然后我们还需要知道我们js和我们的浏览器渲染主线程都是单线程,因为在用户的交互中浏览器不可能同时执行多个任务,因为一些页面的交互都是关联的如果同时执行就会出错,所以同时触发的任务在单线程内就有了异步的概念,然后也因为除了异步还会有其他的任务队列这些任务还有优先级,所以就需要我们的事件循环去根据他们的优先级去执行我们的任务。
传统的异步任务队列就包括如下两个
promise async/await
setTimeout setInterval ajax
然后我们还需要知道微任务是永远优先于宏任务执行的。
首先虚拟dom是什么,虚拟dom就是用js对象描述的一个个dom,通过这些js对象去生成我们的真实dom而且,怎么做还能够使我们跨平台去采用我们的服务端渲染ssr。
在我们的传统前端编写交互中,要去尽量避免我们的dom操作,以免造成我们的页面卡顿,但是比如现在最受欢迎的vue框架它就采用vdom,在编码中几乎很少会去操作我们的真实dom只需要通过我们的vdom去修改替换我们的视图即可。
如果要将页面做极致的优化vdom还是不能胜任,还是要去通过手动的去操作我们dom。
今天我就分享到这里就结束啦,后续我会更新跟多的面试题与大家一起讨论和分享,有兴趣的家人们给我点个赞,关注下。