- 如何设计一个复用组件
 
- 单一职责 (只做一件事,利用组合)
 - 无副作用(不要对其他组件产生影响)
 - 避免操作DOM
 - 开放封闭原则(改变的部分做成参数)
 - 当不需要的时候,很容易就去除
 
- JS异步加载方式
 
- 同步加载(阻止浏览器执行引用JS后面的代码,直到加载完成)
 - 异步加载
- <script type="text/javascript" src="xxx.js" async="async"> 下载完成后执行
 - <script type="text/javascript" src="xxx.js" defer> 渲染完成后执行
 
 
- XSS 和 CSRF
 
- xss 需要过滤用户提交的任何数据
 - csrf 模拟用户请求
 
- 事件委托
 
- 利用冒泡来委托到上级元素
 
- CDN
 
- 内容分发网络, 用来图片缓存,JS CSS缓存
 
- 闭包
 
- 闭包的原理的JS的作用域链。IE中会内存泄露,需要在函数完成之前删除变量.
 
- 跨域
 
- JSONP: 利用script引用的方式,只支持GET
 - CORS: 跨域资源共享, 服务器设置Access-Control-Allow-Origin
 - 代理跨域, 一般用nodejs转发
 - postMessage跨域
 
- 内存泄露
 
- DOM移除, 变量引用没有被清空
 - 事件监听时间移除, DOM节点引用没有被清空
 
- 前端优化
 
- 减少请求数量
 - 控制DNS解析数量
 - GZIP: 在服务器压缩资源,到前端再解压
 - KeepAlive
 
- ES6 和 CommonJS
 
- ES6:import方式,值的引用
 - CommonJS:require方式, 值的copy,内部不会影响到外面