Skip to content

函数Function

debounce

防抖

类型说明

INFO

function debounce(func: (...params: any[]) => any, awit?: number, option?: { leading?: boolean; trailing?: boolean; }): any;

参数

  • func 函数
  • awit 延迟时间 默认 500毫秒
  • option 可选的对象
  • option.leading 前置边缘执行,默认 false
  • option.trailing 后置边缘执行,默认 true

异常

DANGER

awit不是number awit存在但不是数字时触发

DANGER

leading不是boolean leading存在但不是boolean时触发

DANGER

trailing不是boolean trailing存在但不是boolean时触发

示例

ts
debounce(function () { ... })

自定义时间

ts
debounce(function () { ... }, 300)

前置边缘执行,函数触发时立即执行一次

ts
debounce(function () { ... }, 500, {leading: true})

后置边缘执行,函数延迟时间达到后执行

ts
debounce(function () { ... }, 500, {trailing: true})

在vue2中使用

ts
getlist: debounce(function () { ... })

源码

Ts
import isBoolean from '@/verify/isBoolean'
import isNumber from '@/verify/isNumber'
import isFunction from '@/verify/isFunction'
export default function debounce(
  func: (...params: any[]) => any,
  awit = 500,
  option: { leading?: boolean; trailing?: boolean } = { leading: false, trailing: true }
): any {
  let { leading = false, trailing = true } = option
  let timeout = 0
  if (!isFunction(func)) throw 'func不是function'
  if (awit && !isNumber(awit)) throw 'awit不是number'
  if (!isBoolean(leading)) throw 'leading不是boolean'
  if (!isBoolean(trailing)) throw 'trailing不是boolean'
  return function (this: unknown, ...args: any[]) {
    clearTimeout(timeout)
    if (leading) {
      func.apply(this, args)
      leading = false
    }
    timeout = setTimeout(() => {
      leading = leading
      trailing && func.apply(this, args)
    }, awit)
  }
}
Js
import isBoolean from '@/verify/isBoolean';
import isNumber from '@/verify/isNumber';
import isFunction from '@/verify/isFunction';
export default function debounce(func, awit = 500, option = { leading: false, trailing: true }) {
  let { leading = false, trailing = true } = option;
  let timeout = 0;
  if (!isFunction(func)) throw 'func不是function';
  if (awit && !isNumber(awit)) throw 'awit不是number';
  if (!isBoolean(leading)) throw 'leading不是boolean';
  if (!isBoolean(trailing)) throw 'trailing不是boolean';
  return function(...args) {
    clearTimeout(timeout);
    if (leading) {
      func.apply(this, args);
      leading = false;
    }
    timeout = setTimeout(() => {
      leading = leading;
      trailing && func.apply(this, args);
    }, awit);
  };
}

once

只调用一次的函数

类型说明

INFO

function once(func: (...params: any[]) => any): (this: unknown, ...args: any[]) => void;

参数

  • func 函数

示例

ts
once(function () { ... })

在vue2中使用

ts
getlist: once(function () { ... })

源码

Ts
import isFunction from '@/verify/isFunction'
export default function once(func: (...params: any[]) => any) {
  if (!isFunction(func)) throw 'func不是function'
  let called = false
  return function (this: unknown, ...args: any[]) {
    if (!called) {
      called = true
      func.apply(this, args)
    }
  }
}
Js
import isFunction from '@/verify/isFunction';
export default function once(func) {
  if (!isFunction(func)) throw 'func不是function';
  let called = false;
  return function(...args) {
    if (!called) {
      called = true;
      func.apply(this, args);
    }
  };
}

throttle

节流

类型说明

INFO

function throttle(func: (...params: any[]) => any, wait?: number, immediate?: boolean): (this: unknown, ...args: any[]) => void;

参数

  • func 函数
  • wait 延迟时间 默认 500毫秒
  • immediate 是否立即执行

异常

DANGER

wait不是number wait存在但不是数字时触发

DANGER

immediate不是boolean immediate存在但不是boolean时触发

示例

ts
throttle(function () { ... })

自定义时间

ts
throttle(function () { ... }, 300)

函数触发时立即执行一次

ts
throttle(function () { ... }, 500, immediate: true)

在vue2中使用

ts
getlist: throttle(function () { ... })

源码

Ts
import isBoolean from '@/verify/isBoolean'
import isNumber from '@/verify/isNumber'
import isFunction from '@/verify/isFunction'
export default function throttle(func: (...params: any[]) => any, wait = 500, immediate = false) {
  let timeout = 0
  if (!isFunction(func)) throw 'func不是function'
  if (wait && !isNumber(wait)) throw 'wait不是number'
  if (!isBoolean(immediate)) throw 'immediate不是boolean'
  return function (this: unknown, ...args: any[]) {
    if (immediate) {
      func.apply(this, args)
      immediate = false
    }
    if (!timeout) {
      timeout = setTimeout(() => {
        func.apply(this, args)
        timeout = 0
      }, wait)
    }
  }
}
Js
import isBoolean from '@/verify/isBoolean';
import isNumber from '@/verify/isNumber';
import isFunction from '@/verify/isFunction';
export default function throttle(func, wait = 500, immediate = false) {
  let timeout = 0;
  if (!isFunction(func)) throw 'func不是function';
  if (wait && !isNumber(wait)) throw 'wait不是number';
  if (!isBoolean(immediate)) throw 'immediate不是boolean';
  return function(...args) {
    if (immediate) {
      func.apply(this, args);
      immediate = false;
    }
    if (!timeout) {
      timeout = setTimeout(() => {
        func.apply(this, args);
        timeout = 0;
      }, wait);
    }
  };
}

isFunction

判断是否为Function

类型说明

INFO

function isFunction(value: any): boolean;

参数

  • value 任意值

返回

  • boolean

TIP

true | false

示例

验证通过

ts
isFunction(function(){}) => true

验证失败

ts
isFunction(123) => false

源码

Ts
import typeOf from '@/common/typeOf'
export default function isFunction(value: any): boolean {
  return typeOf(value) === 'Function'
}
Js
import typeOf from '@/common/typeOf';
export default function isFunction(value) {
  return typeOf(value) === 'Function';
}