Code
防抖函数 1、防抖函数接收两个参数(运行函数,定时器时间间隔);
2、防抖函数返回一个函数(闭包);
3、闭包外定义定时器;
4、闭包里:
定义this,arguments; 首先清除定时器; 重新设置定时器; function debounce(fn, delay) { let timer = null; return function () { const self = this, args = arguments; timer && clearTimeout(timer); timer = setTimeout(function () { fn.apply(self, …
实现1 function deepClone(obj, hash = new WeakMap()) { if (obj instanceof RegExp) return new RegExp(obj); if (obj instanceof Date) return new Date(obj); if (obj === null || typeof obj != "object") { return obj; // 如果不是复杂数据类型,直接返回 } if (hash.has(obj)) { return has.get(obj); } /** * 如果obj是数组, …
代码 function curry(fn, currArgs) { return function () { let args = [].slice.call(arguments); // 首次调用时,若未提供最后一个参数currArgs,则不用进行args的拼接 if (currArgs !== undefined) { args = args.concat(currArgs); } // 递归调用 if (args.length < fn.length) { return curry(fn, args); } // 递归出口 return fn.apply(null, args); …
题目 基于 localStorage 设计一个 1M 的缓存系统,需要实现缓存淘汰机制。
设计思路如下:
存储的每个对象需要添加两个属性:分别是过期时间和存储时间。 利用一个属性保存系统中目前所占空间大小,每次存储都增加该属性。当该属性值大于 1M 时,需要按照时间排序系统中的数据,删除一定量的数据保证能够存储下目前需要存储的数据。 每次取数据时,需要判断该缓存数据是否过期,如果过期就删除。 以下是代码实现,实现了思路,但是可能会存在 Bug,但是这种设计题一般是给出设计思路和部分代码,不会需要写出一个无问题的代码
class Store { constructor() { let store …
简单实现 var xhr = null; // Old compatibility code, no longer needed. if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ... xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE 6 and older xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.onreadystatechange = function () { …
代码 class Storage { constructor(name) { this.name = "storage"; } //设置缓存 setItem(params) { let obj = { name: "", value: "", expires: "", startTime: new Date().getTime(), //记录何时将值存入缓存,毫秒级 }; let options = {}; //将obj和传进来的params合并 Object.assign(options, obj, params); let { …
Prev
2/2