酷家乐电面

2019-04-14 12:53发布

1,js事件队列异步机制

首先,js是单线程的,也就是说所有的同步任务都需要等到前一个执行完毕,才能继续执行后一个任务。这样造成的效率会很低,在h5提出了在浏览器中创建多个线程的提案,但是子线程不能操作dom,否则会造成非常复杂的同步问题。
任务队列
所谓"回调函数"(callback),就是那些会被主线程挂起来的代码。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。
只要执行栈一清空,"任务队列"上第一位的事件就自动进入主线程.
只要被指定过回调函数就会进入任务队列。
储存可以执行的异步任务。
主线程
主线程执行同步任务,一个接一个,同步任务总是在异步任务执行之前的,只有同步任务执行完毕,主线程才会去任务队列中读取异步任务。这个过程被不断循环。
先进入任务队列的异步任务先被执行。

2,块级作用域

JS并不支持块级作用域,它只支持函数作用域
JavaScript 采用的是词法作用域(静态作用域),函数的作用域在函数定义的时候就决定了。不会因为函数的上下文而改变。
任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。

3,原生JS事件绑定

  1. dom.onclick = fn(){}
  2. dom.addeventlistener = function('click',fn,false){} //此处冒泡和捕获都会触发,只是在这上面注册的是哪种的区别

4,浏览器缓存机制

6870041-a6aec82aa71a0467.png 详细的缓存机制
如果缓存未过期,直接读取缓存的话,返回的是200状态码,还有浏览器存贮的资源。
如果过期,判断是否含有eTag令牌,如果有的话,向服务器发送if-none-match的请求,若令牌全部匹配,则直接从缓存中读取,304状态码。若有不匹配的,则下载不匹配的资源,防止资源加载重叠,最终状态码是200。若没有令牌机制,则检测last-Modified(优先级低于eTag),若有这个机制,则向服务器发送带if-modified-Since的请求,若资源皆是最后一次修改,则从缓存中读取返回304状态码,否则读取修改的资源。若eTag和last-Modified机制都没有,那么直接向服务器请求所有资源,最后协商缓存,呈现页面。

5,原型链顶层

6870041-890fb5e6fd1d5532.png 测试
Object.prototype是Array和Function的上层,Object.prototype的上层是null。

6,盒模型

这个都答得含含糊糊的,我可以去死了= =
6870041-f3940c9d06f866c2.png ie盒模型(怪异盒模型),padding和border算在width里
6870041-c16c8f09b4ec98e9.png 标准盒模型,由width,padding,border,margin构成
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,特么= =心态炸了
爆炸

热门文章