此方法为jquery判断函数类型的方式,经过事先缓存全部全部类型的结果,而后进行object的key值查找jquery
var class2type = {}
var toString = class2type.toString
var str =
'String Number Boolean Symbol Null Object Array Date RegExp Function Error'
var arr = str.split(' ')
arr.forEach(function(name) {
class2type['[object ' + name + ']'] = name.toLowerCase()
})
function type(obj) {
if (obj === null) return obj + ''
return typeof obj === 'object' || typeof obj === 'function'
? class2type[toString.call(obj)] || 'object'
: typeof obj
}
复制代码
const type = obj => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
复制代码
防抖函数原理:在事件被触发n秒后再执行回调,若是在这n秒内又被触发,则从新计时。git
const debounce = (fn, delay, immediate) => {
let timeout
return function(...args) {
let context = this
let callNow = immediate && !timeout
clearTimeout(timeout)
timeout = setTimeout(() => {
timeout = null
if (!immediate) fn.apply(context, args)
}, delay)
callNow && fn.apply(context, args)
}
}
复制代码
使用场景:github
节流函数原理:规定在一个单位时间内,只能触发一次函数。若是这个单位时间内触发屡次函数,只有一次生效。浏览器
const throttle = (fn, delay) => {
let flag = false
return function(...args) {
if (!flag) return
flag = true
setTimeout(() => {
fn.apply(this, args)
flag = false
}, delay)
}
}
复制代码
使用场景:缓存
函数柯里化指的是将可以接收多个参数的函数转化为接收单一参数的函数,而且返回接收余下参数且返回结果的新函数的技术。app
函数柯里化的主要做用和特色就是参数复用、提早返回和延迟执行。函数
// 柯里化
const curry = fn => {
if (fn.length <= 1) return fn;
const generator = args =>
args.length === fn.length ?
fn(...args) :
arg => generator([...args, arg]);
return generator([], fn.length);
};
复制代码
使用场景: 假设有一个方法,接收三个参数,第一个参数为name,咱们能够肯定name为固定的,那么,可使用柯里化,先传入一个参数,做为默认使用函数,避免后续的重复传参。性能
function isAllTrue() {
var sum = 0
for (var i = 0; i < arguments.length; i++) {
if (arguments[i]) {
sum += arguments[i]
}
}
// sum的数量为true的个数
return sum === arguments.length
}
复制代码
使用场景:动画