08-Cookie&跨域&闭包

1. cookie
特点:
- 只能存储
文本 - 单条存储有大小限制
4KB左右,数量有限制,一般浏览器限制在50条左右 - 读取有域名限制:
不可跨域读取,只能由来自 写入cookie的同一域名 的网页可进行读取。 - 时间限制:
expires- 可以设置过期时间(硬盘中-生存期到 / 用户注销 / 用户清理cookie 才会销毁)
- 默认有效期是会话级别(内存中-浏览器关闭cookie就销毁)
- 路径限制:
path存储时可以指定路径,只允许子路径读取外层cookie,外层不能读取内层
结合token和sessionId才能实现用户登录验证的功能。
1.1 创建cookie
1 | |
1.2 删除cookie
使用旧的过期时间进行设置,覆盖后即为删除。
1 | |
1.3 修改cookie
使用创建的方式覆盖。
1.4 查询cookie
1 | |
2. jsonp跨域
2.1 CORS
同源策略:同域名、同端口号、同协议
不符合同源策略,浏览器为了安全,会阻止请求。
CORS跨域解决:
- 由后端去实现允许跨域的范围 ,在header中设置
Access-Control-Allow-Origin:**允许所有域名请求,如果设置为具体域名,则限制为具体域名可请求访问
- 如果是前端实现跨域,可以用
jsonp,必须前后端协作
2.2 jsonp
原理:
- 动态创建 script 标签,src 属性指向没有跨域限制
- 指向一个接口,接口返回的格式一定是
****()函数表达式
缺点:
- 需要 onload 删除 script 标签
- 只能 get 请求,不能 post/put/delete 请求
用法:
jsonp.html
1 | |
1.txt
1 | |
示例:
1 | |
浏览器 console.log:
1 | |
案例:jsonp模拟百度搜索联想词
https://www.baidu.com/sugrec?...&wd=a...cb=jQuery110207800798037841062_1765776153723...
wd: 搜索关键词cb: 回调函数
1 | |
效果:

3. 闭包
3.1 背景

百度搜索时,输入搜索词 common,每一个字母都会触发 callback 函数去执行搜索和搜索结果展示,但是输入比较快的时候前面的字母均会被打断,显示失败,之后最后输入完毕时,触发正常 callback 执行。
函数有返回值,而且返回值必须是复杂类型,同时要赋值给外面的变量。
1 | |
3.2 闭包
函数内部(或函数内部的对象属性中包含函数,对象被返回时)返回一个函数,被外界所引用。
这个内部函数就不会被销毁回收。
内部函数所用到的外部函数的变量也不会被销毁。
优点:让临时变量永驻内存
缺点:内存泄露风险,记得赋值 func = null (则会被回收) 即可。

闭包应用:函数的柯里化
语法示例1:
1 | |
语法示例2:(闭包的匿名自执行函数)
1 | |
fetch 闭包的封装:
1 | |
案例:闭包-记住列表索引
1 | |
案例:闭包应用1-防抖
1 | |
效果:

案例:闭包应用2-节流
节流: n 秒内只执行一次事件,即使n 秒内事件重复触发,也只有一次生效
场景:浏览器滚动事件、窗口大小的改变
示例:监听window窗口大小改变
1 | |
1 | |
效果:

08-Cookie&跨域&闭包
https://janycode.github.io/2018/05/07/04_大前端/03_JavaScript/08-Cookie&跨域&闭包/