前端面经 - 简单 - 概念题

1 从输入一个 URL 地址到浏览器完成渲染的整个过程

这个问题属于老生常谈的经典问题了 下面给出面试简单版作答

  1. 浏览器地址栏输入 URL 并回车
  2. 浏览器查找当前 URL 是否存在缓存,并比较缓存是否过期
  3. DNS 解析 URL 对应的 IP
  4. 根据 IP 建立 TCP 连接(三次握手)
  5. 发送 http 请求
  6. 服务器处理请求,浏览器接受 HTTP 响应
  7. 浏览器解析并渲染页面
  8. 关闭 TCP 连接(四次握手)

2 什么是事件代理(事件委托) 有什么好处

事件委托的原理:不给每个子节点单独设置事件监听器,而是设置在其父节点上,然后利用冒泡原理设置每个子节点。
优点:

  1. 减少内存消耗和 dom 操作,提高性能

在 JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能,因为需要不断的操作 dom,那么引起浏览器重绘和回流的可能也就越多,页面交互的事件也就变的越长,这也就是为什么要减少 dom 操作的原因。每一个事件处理函数,都是一个对象,多一个事件处理函数,内存中就会被多占用一部分空间。如果要用事件委托,就会将所有的操作放到 js 程序里面,只对它的父级进行操作,与 dom 的操作就只需要交互一次,这样就能大大的减少与 dom 的交互次数,提高性能;

  1. 动态绑定事件

因为事件绑定在父级元素 所以新增的元素也能触发同样的事件

3 addEventListener 默认是捕获还是冒泡

默认是冒泡

addEventListener第三个参数默认为 false 代表执行事件冒泡行为。

当为 true 时执行事件捕获行为。

参考链接:https://www.runoob.com/jsref/met-element-addeventlistener.html

4.apply call bind 区别

三者都可以改变函数的 this 对象指向。
三者第一个参数都是 this 要指向的对象,如果如果没有这个参数或参数为 undefined 或 null,则默认指向全局 window。
三者都可以传参,但是 apply 是数组,而 call 是参数列表,且 apply 和 call 是一次性传入参数,而 bind 可以分为多次传入。
bind 是返回绑定 this 之后的函数,便于稍后调用;apply 、call 则是立即执行 。
bind()会返回一个新的函数,如果这个返回的新的函数作为构造函数创建一个新的对象,那么此时 this 不再指向传入给 bind 的第一个参数,而是指向用 new 创建的实例

注意!很多同学可能会忽略 bind 绑定的函数作为构造函数进行 new 实例化的情况

css 优先级是怎么计算的

第一优先级:!important 会覆盖页面内任何位置的元素样式
1.内联样式,如 style=“color: green”,权值为 1000
2.ID 选择器,如#app,权值为 0100
3.类、伪类、属性选择器,如.foo, :first-child, div[class=“foo”],权值为 0010
4.标签、伪元素选择器,如 div::first-line,权值为 0001
5.通配符、子类选择器、兄弟选择器,如*, >, +,权值为 0000
6.继承的样式没有权值

参考链接:
https://juejin.cn/post/7004638318843412493#heading-26

你可能感兴趣的