0101面试题——cookie、闭包、BFC、盒模型
存储
- 关于Cookie你知道哪些
- Cookie由服务器通过响应头的set-cookie字段进行设置
- 当客户端向服务器发起HTTP请求时,Cookie会自动添加到请求头中
- 可以通过document.cookie接口,在前端对cookie进行操作
- 未设置过期时间的cookie为会话cookie,当用户退出浏览器时,会话cookie被删除,反之为持久cookie,存储在硬盘上,直到过期才被删除
- CORS请求默认不发送Cookie。如果需要,则服务器需指定Access-Control-Allow-Credentials字段为true。AJAX请求中需打开XMLHttpRequest对象的withCredentials属性。并且Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。
- cookie的组成
- 名称和值 name = value:必须
- 域 domin: 可选。表示该cookie对哪个域是有效的。所有向该域发送的请求中都会包含这个cookie。默认为设置该cookie的服务器所在域
- 路径 path: 可选。表示哪些路径下的文件有权限读取该 cookie。默认是设置Cookie的当前目录
- 失效时间 expires(新规范中是max-age):可选。
- 安全标志 secure: 可选。表示cookie只有在使用SSL连接(即使用HTTPS)的时候才发送到服务器
- http专用 httpOnly: 可选。表示cookie能否通过JS访问
- 注意:域、路径、失效时间、安全标志、HttpOnly都是服务器给浏览器的指示,这些字段不会作为发送到服务器的Cookie的信息,只有name=value会被发送
JS
- 什么是闭包?使用场景?缺点
- 什么是闭包
- 在离散数学中一个集合的闭包是,至少拥有该集合的全部元素
- 在js中,内部的函数的作用域至少是外部的函数的作用域,因此内部函数是外部函数的闭包(自己的理解0.0)
- 形成闭包的条件:函数嵌套,并且内部函数引用外部函数的变量。
- 闭包实际上是作用域链上的一个Closure对象,里面保存了内部函数引用的外部函数的变量
- 闭包的作用
- 使函数的内部变量(函数)在函数执行完后,仍然存活在内存中,延长了局部变量的生命周期
- 将变量(函数)定义在闭包中使用,避免污染全局变量
- 定义JS模块
- 缺点
- 函数执行完后,函数内的变量没有释放,占用内存时间会变长,容易造成内存泄露
CSS
- 什么是BFC
- BFC(Block Formatting Context)块级格式化上下文
- 是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。
- 触发BFC的条件:
- 浮动元素,float 除 none 以外的值;
- 定位元素,position(absolute,fixed);
- display 为以下其中之一的值 inline-block,table-cell,table-caption;
- overflow 除了 visible 以外的值(hidden,auto,scroll);
- BFC的特性:
- 内部的Box会在垂直方向上一个接一个的放置。
- 垂直方向上的距离由margin决定
- bfc的区域不会与float的元素区域重叠。
- 计算bfc的高度时,浮动元素也参与计算
- bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。
- 什么是盒模型
- 页面就是由一个个盒模型堆砌起来的,每个HTML元素都按盒模型填充
- 盒模型包括:外边距margin、边框border、内边距padding、内容content。
- 盒模型分两种:
- border-box:IE盒模型,width 和 height 指的是内容区域(content)+border+padding的宽度和高度。
- content-box:标准盒模型,width 和 height 指的是内容(content)区域的宽度和高度