如果一个函数内可以调用函数本身,那么这个就是递归函数
函数内部调用自己
特别注意:写递归必须要有退出条件return
深拷贝就是完全拷贝一份新的对象,会在堆内存中开辟新的空间,拷贝的对象被修改后,原对象不受影响,主要针对的是引用数据类型。
1.扩展运算符
2.JSON.parse(JSON.stringify())
3.利用递归函数来实现
1.JS是一个单线程的脚本语言
主线程 执行栈 任务队列 宏任务 微任务
主线程先执行同步的任务,然后才去执行任务队列里的任务,如果在执行宏任务之前有微任务,那么要先执行微任务,全部执行完毕之后等待主线程的调用,调用完毕再去任务队列中查看是否有异步任务,这样一个循环往复的过程就是事件循环!
创建交互式网页应用的网页开发技术
在不重新加载整个网页的前提下,与服务器交换数据并更新部分内容
通过XmlHttpRequest对象向服务器发送异步请求,从服务器拿到数据.最后通过JS操作DOM更新页面
1.创建XmlHttpRequest 对象 xml
2.通过xmh对象里的open()方法和服务器建立链接
3.构建请求所需的数据,并通过xml对象的send()方法发送给服务器
4.通过xmh对象的onreadystate chansge事件监听服务器和你的通信状态
5.接收并处理服务器响应的数据结果
6.把处理的数据更新到HTML页面上
1.get一般获取数据,post一般提交数据
2.get参数会放在url上,所以安全性比较差,post是放在body中
3.get请求时会被缓存,post请求不会被缓存
4.get请求会被保存在浏览器历史记录中,post不会
5.get请求只能url编码,psot请求支持很多种
Promise对象,封装了一个异步操作并且还可以获取成功或失败的结果
Promise主要是解决回调地狱的问题,之前如果异步任务比较多,同时他们之间有相互依赖的关系,
就只能使用回调函数处理,这样就容易形成回调地狱,代码的可读性差,维护性差
有三种状态:pending fulfiled rejected
等待 成功 失败
状态改变只会有两种情况:
pending----------->fulfilled ;pending---------->rejected 一旦发生,状态就会凝固,不会再变
首先就是我们无法取消,一旦创建它就会立即执行,不能中途取消
如果不设置回调,若当前处于pending状态时,无法得知目前在那个阶段
原理:
构造一个Promise实例,实例需要传递函数的参数,这个函数有两个形参,分别是函数类型,一个是resolve,一个reject
promise上还有then方法,这个方法就是来指定状态改变时的确定操作,resolve是执行第一个函数,reject是执行第二个函数
1.都是处理异步请求的方式
2.promise是ES6,async,await 是ES7的语法
3.async await是基于promise实现的,他和promise都是非阻塞性的
优缺点:
1.promise是返回对象我们要用then,catch方法处理和捕获异常,并且书写方式是链式,容易造成代码重叠,不好维护,async,await是通过try catch进行捕获异常
2.async await最大的优点就是能让代码看起来像同步一样,只要遇到await就会立刻返回结果,然后再执行后面的操作Promise,Promise.then()的方式返回,会出现请求还没返回,就执行了后面的操作
1.cookies
H5标准前的本地存储方式
兼容性好,请求头自带cookie
存储量小,资源浪费,使用麻烦(封装)
2.localstorage
操作方便,永久存储,兼容性较好
3.sessionstorage
当前页面关闭后就会立刻清理,会话级别的存储方式
4.indexedDB
H5标准的存储方式,.他是以键值对进行存储
token:验证身份的令牌,一般就是用户通过账号密码登录后,服务端把这些凭证通过加密等一系列操作后得到的字符串
1.存localstorage里,后期每次请求接口都需要把它当作一个字段传给后台
2.存cookie中,会自动发送,缺点就是不能跨越
如果存在localstorag中,容易被xss攻击,但是如果做好了对应的措施是利大于弊的
如果存在cookie中会有csrf攻击
1.客户端用账号密码请求登录
2.服务端收到请求后,需要去验证账号密码
3.验证成功之后,服务端会签发一个token,把这个token发送给客户端
4.客户端收到token后保存起来,可以放在cookie或者localstorage
5.客户端每次向服务端发送请求资源的时候,都需要携带这个token
6.服务端收到请求,接着去验证客户端里的token,验证成功才会返回客户端请求的数据
DNS解析
建立TCP链接
发送http请求
服务器处理请求
渲染页面
(1)浏览器会获取HTML和css的资源,然后把HTML解析成DOM树
(2) 再把css解析成cssom
(3) 把DOM和CSSOM合并为渲染树
(4) 布局
(5) 把渲染树的每个节点渲染到屏幕上
断开TCP链接
DOM树是和HTML标签一一对应的,包括head和隐藏元素
渲染树是不包括head和隐藏元素