1.闭包
首先是为什么有闭包的出现
因为在咱们JavaScript语言中有两种作用域全局作用域和局部作用 域 那么这样就导致了一个问题
函数内部可以读取全局变量 但是函数外部无法读取函数内部的局部变量 因此为了解决这个问题闭包就诞生了
这个地方需要注意 函数内部的变量需要用var 声明 如果不是声明就是一个全局变量
闭包的定义
搭建一条函数外部与函数内部的桥梁 正常情况下函数外部是访问不到函数内部的作用域变量的
闭包的作用
- 可以读取函数内部的变量
- 让这个变量的值始终保存在内存中
- 可以隔离作用域 解决全局变量污染的问题
闭包缺点
1.由于长期驻留在内存中 就会导致内存泄漏 2.对于长期保存在内存中 内存消耗就很大 所以不能滥用闭包 否则会造成内存泄漏 解决方案 在退出这个函数之前 将不适用的局部变量全部删除
2.js中的原型链与原型
首先什么是原型
- 因为在js中 万物皆对象 每一个对象都用自己的属性
- 那么 怎样才能让多个对象共享一个或者多个方法呐
- 原型的出现就是为了解决这个问题
- 在js中每个对象都会有一个与之相关联的对象,叫做原型对象
- 每次获取对象属性的时候都是一次查询的过程,在对象自己的属性中查找如果找不到 就会去他的原型对象上去查找
原型链又是什么
原型连成的一条链就是原型链
在js查找属性的过程中 如果自有的属性中 找不到就会去原型对象中查找 如果原型对象中还找不到 那么就去他原型对象的原型上去查找 直到查找到原型链的顶端 Object
这个查找的过程连成的一条链就是原型链
3. 说一下es6的新特性
可以从多个方面说
- 变量上 新增了 let 和 const
- 函数上 新增用来简化函数的箭头函数
- 运算符上 新增了拓展运算符
- 字符串上 新增模板字符串
- 声明变量上 新增了解构赋值
- 模块上 新增import导入和导出 export、export default
- 异步请求上 新增 Promise 、async 和 await
- 数组上 新增的方法 建议去大佬的官网上搜索
- 字符串上 新增的方法
- 数据结构新增 map 和 set
- 数据类型新增 symbol
4、js的作用域和作用域链
什么是js作用域
js作用域就是js识别变量的范围 作用域链 就是js查找变量的顺序
作用域包括那些
全局作用域 局部作用域 es6的块级作用域
作用域分别的作用
- 全局作用域 也就是定义在window下的变量范围 在任何地方都可以访问
- 局部作用域 在函数内部定义的变量范围
- 块级作用域 就是用let 或者 const 声明的 任意代码块中定义的变量 就是块级作用 常用的场景 for循环中 let 定义的变量 和 if语句中
- 注意 尽量不要使用全局变量 否则会导致全局变量污染命名冲突的问题
5.输入url页面加载发生了什么
简单来说 过程是这样的
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求返回数据响应
- 浏览器开始解析渲染页面
- 连接结束 连贯起来就是这样子 输入一个域名,域名要通过DNS解析找到这个域名对应的服务器地址ip 通过tcp请求连接服务器 通过web服务器返回数据 浏览器再根据返回的数据构建dom树 通过css渲染引擎以及js解析引擎将页面渲染出来 关闭tcp连接
具体细节一 合成url
用户输入url 浏览器会根据用户输入的信息判断是搜索还是网址 如果是搜索的内容 就将搜索的内容+默认搜索引擎合成新的url 如果用户输入的内容符合url规则 浏览器就会根据url协议 在当前url上加入协议合成合法的url
具体细节二 DNS域名解析
1.客户端与浏览器端
- 在客户端和浏览器端 本地DNS之间的查找方式是递归查询 递归的过程
- 从客户端 到 浏览器缓存
- 浏览器缓存 到 本地hosts文件
- 本地hosts文件 到 本地DNS解析器缓存
- 本地DNS解析器缓存 到 本地DNS服务器
- 最后返回到 继续从客户端开始 注意 这个过程任何一步找到就结束
如果本地DNS服务器没有查询到 就会根据本地DNS服务器设置转发器进行 接下来的操作 2.本地DNS服务器与根域名以及子域名之间 迭代的过程
- 本地DNS服务器 与 根域名服务器 之间双向
- 本地DNS服务器 与 顶级域名服务器 之间双向
- 本地DNS服务器 与 权威域名服务器 之间双向 这个查找过程 有以下优点
- DNS存在多级缓存 从离浏览器的距离排序的话 有以下
- 浏览器缓存
- 系统缓存
- 路由器缓存
- IPS服务器缓存
- 根域名服务器缓存
- 顶级域名服务器缓存
- 主域名服务器缓存
具体细节三 浏览器渲染页面
分为以下几个过程 构造DOM树 样式计算 布局阶段 分层 栅格化以及显示 1.浏览器的渲染进程 将 HTML 渲染为 dom树 2.渲染引擎将css样式表解析为css规则树 3.解析js 操作dom树 和 css 规则树 合并一起生成渲染树 4.遍历渲染树 开始布局计算 每一个节点位置大小信息 5. 浏览器将所有图层数据发送给GPU 渲染线程绘制到屏幕上