# 前言

趁着有空,把自己平时使用的一些函数抽离出来做个记录。

# 防抖

防抖的思想是:当某个事件处理函数被短时间内高频出发时,只有触发完一定时间没有再触发才会执行

可以用于输入框监听等高频触发事件的地方。

/**
* @params {function} fn 需要防抖的函数
*	@params {number} time 多久没有触发才执行
*/ 
function debounce(fn,time){
  var timer = null;
  return function(){
    clearTimeout(timer);
    
    timeout = setTimeout(() => {
      fn.apply(this,arguments);
    },time);
  }
}

# 节流

使用场景同防抖,只不过核心思想有些不一致。

节流是某个事件处理函数被短时间内高频触发时,一定时间内只执行一次,可以降低执行频率。

/**
*	@params {function} fn 
*	@params {number} time
*/
function throttle(fn,time){
  let canRun = true;
  return function(){
    if(!canRun) return;
    canRun = false;
    setTimeout(() => {
      fn.apply(this,arguments);
      canRun = true;
    },time);
  }
}

# 只执行一次

function once(fn) {
	let result, executed;
  return function () {
    if (!executed) {
      executed = true
      result = fn.apply(this, arguments)
    }
    return result
  }
}

# cookie 相关

# 获取 cookie

function getCookie(name){
  var name = name + '=';
  var ca = document.cookie.split(';');
  for(let i = 0;i<ca.length;i++){
    let c = ca[i].trim();
    if(c.indexOf(name) == 0)return c.substring(name.length,c.length);
  }
  return "";
}

# 设置 cookie

function setCookie(name,value,day){
  var d = new Date();
  d.setTime(d.getTime()+(day*24*60*60*1000));
  let expires = "expires=" + d.toGMTString();
  document.cookie = name + '=' value + '; ' + expires;
}

# call 函数

Function.prototype.call = function(context){
  if(typeof this !== 'function'){
    throw new TypeError('error');
  }
  context = context || window;
  context.fn = this;
  const args = [...arguments].slice(1);
  const result = context.fn(...args);
  delete context.fn;
  return result;
}

# apply 函数

Function.prototype.apple = function(context){
  if(typeof this !== 'function'){
    throw new TypeError('error');
  }
  context = context || window;
  context.fn = this;
  if(arguments[1]){
    result = context.fn(...arguments[1]);
  }else{
    result = context.fn();
  }
  delete context.fn;
  return result;
}

# bind 函数

Function.prototype.myBind = function(context){
  if(typeof this !== 'function'){
    throw new TypeError('error');
  }
  const _this = this;
  const args.= [...arguments].slice(1);
  return function F(){
    if(this instanceof F){
      return new _this(...args,...arguments);
    }
    return _this.apply(context,args.concat(...arguments));
  }
}

# 获取某个元素的 style

function getStyle(obj,attr){
	if(obj.currentStyle)return obj.currentStyle[attr];
  else return getComputedStyle(obj,false)[attr];
}

# 按顺序执行 Promise

/**
 * 依次执行数组中的每一个 Promise。
 * @param {Array} array 每一项都是一个函数,函数返回值是 promise
 * @param {string} value 
 * @returns {object} 
 * 
 */
const runPromiseInSequence = (array,value) => array.reduce(
    (promiseChain,nowPromise) => promiseChain.then(nowPromise)
    ,Promise.resolve(value));
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

orange 微信支付

微信支付

orange 支付宝

支付宝

orange 贝宝

贝宝