![](https://csdnimg.cn/release/download_crawler_static/86142477/bg9.jpg)
① 减少全局变量。
② 减少传递函数的参数量
③ 封装;
缺点:
使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等 .
16 怎么实现跨域请求
1、jsonp
最常见的一种跨域方式, 其背后原理就是利用了 script 标签不受同源策略的限制, 在页面中
动态插入了 script ,script 标签的 src 属性就是后端 api 接口的地址, 并且以 get 的方式将前端
回调处理函数名称告诉后端,后端在响应请求时会将回调返还,并且将数据以参数的形式传递回
去。 jsonp 只能发送 get 请求。
2、CORS
Cross-Origin Resource Sharing(跨域资源共享)是一种允许当前域( origin )的资源(比如
html/js/web service )被其他域( origin )的脚本请求访问的机制。
当使用 XMLHttpRequest 发送请求时,浏览器如果发现违反了同源策略就会自动加上一个请求头
origin,后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性
Access-Control-Allow-Origin ,值就是发起请求的源地址 (http://127.0.0.1:8888) ,浏览器得到响应会
进行判断 Access-Control-Allow-Origin 的值是否和当前的地址相同, 只有匹配成功后才进行响应处
理。
现代浏览器中和移动端都支持 CORS(除了 opera mini ), IE 下需要 8+
3、服务器跨域
在前后端分离的项目中可以借助服务器实现跨域, 具体做法是: 前端向本地服务器发送请求,
本地服务器代替前端再向真实服务器接口发送请求进行服务器间通信,本地服务器其实充当个
「中转站」的角色,再将响应的数据返回给前端
缺点:服务器跨域需要另起服务器
4、postmessage跨域
在 HTML5 中新增了 postMessage 方法, postMessage 可以实现跨文档消息传输 Cross
Document Messaging ,IE8, Firefox 3,Opera 9, Chrome 3 和 Safari 4 都支持 postMessage。
该方法可以通过绑定 window 的 message 事件来监听发送跨文档消息传输内容。
使用 postMessage 实现跨域的话原理就类似于 jsonp,动态插入 iframe 标签,再从 iframe 里面
拿回数据
,私认为用作跨页面通信更加适合
总结
当然还有其他实现跨域的方式比如在 ie8、9 下 XDR 跨域方案, flash 方案, 以上是一些常用的跨
域方案,都各有利弊,比如: jsonp 只能发送 get 请求、服务器跨域需要另起服务器等等,大家
可以根据自己项目需求选择适合的解决方案,