39 lines
896 B
JavaScript
39 lines
896 B
JavaScript
var simpleIsEqual = function simpleIsEqual(a, b) {
|
|
return a === b;
|
|
};
|
|
|
|
function index (resultFn, isEqual) {
|
|
if (isEqual === void 0) {
|
|
isEqual = simpleIsEqual;
|
|
}
|
|
|
|
var lastThis;
|
|
var lastArgs = [];
|
|
var lastResult;
|
|
var calledOnce = false;
|
|
|
|
var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {
|
|
return isEqual(newArg, lastArgs[index]);
|
|
};
|
|
|
|
var result = function result() {
|
|
for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
newArgs[_key] = arguments[_key];
|
|
}
|
|
|
|
if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {
|
|
return lastResult;
|
|
}
|
|
|
|
lastResult = resultFn.apply(this, newArgs);
|
|
calledOnce = true;
|
|
lastThis = this;
|
|
lastArgs = newArgs;
|
|
return lastResult;
|
|
};
|
|
|
|
return result;
|
|
}
|
|
|
|
export default index;
|