1.节流和防抖
节流:高频触发事件,在n秒内只执行一次
1 function throttle (fn, delay) { 2 let canRun = ture 3 return function () { 4 if (!canRun) return 5 canRun = false 6 setTimeOut(()=> { 7 fn.apply(this, arguments) 8 canRun = true 9 }, delay) 10 } 11 }
防抖:触发时间后n秒只执行一次,如果n秒内再次触发,则会重新计算时间
function debounce (fn, delay) { let timer = null return function () { if (timer) clearTimeout(timer) timer = setTimeOut(() => { fn.apply(this, arguments) }, delay) } }
2.get和post
http协议从未规定GET/POST的请求长度是多少。对GET请求参数的限制是来源浏览器或WEB服务器,浏览器或者web服务器限制了url长度
IE最大长度是2083Byte,谷歌的话是8182byte
get和post在缓存方面的区别
- get请求类似查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存
- post一般是修改和删除工作,所以必须和数据库交互,所以不能使用缓存
3.模块化发展
IIFE:使用自执行函数来编写模块化;在一个单独的函数作用域中执行代码,避免变量冲突
(function(){ return { data:[] } })()
AMD:使用require.js来编写模块化;依赖必须提前声明好
define('./index.js',function(code){ // code 就是index.js 返回的内容 })
CMD:使用seaJS来编写模块化;支持动态引入依赖文件
define(function(require, exports, module) { var indexCode = require('./index.js'); })
CommonJS:nodejs自带的模块化
var fs = require('fs');
ES Module:es6引入的模块化,支持import来引入另一个js
import a from 'a';
4.ES5的继承和ES6的继承有什么区别?
es5的继承是通过prototype或构造函数机制来实现。es5的继承实质上是先创建子类的实例对象,然后将父类的方法添加到this上
es6实质上是先创建父类的实例对象this,(所以必须先调用父类的super()方法),然后在用子类的构造函数修改this
具体的:es6通过class定义类,里面有构造方法,类之间通过extends关键字实现继承。子类必须在constructor方法中调用super()方法,否则新实例报错。因为子类没有自己的this对象,而是继承了父类的this对象,然后对其加工。如果不调用super方法,子类得不到this对象