zent
Version:
一套前端设计语言和基于React的实现
32 lines (31 loc) • 971 B
JavaScript
var shallowEqual = function (newValue, oldValue) {
return newValue === oldValue;
};
var simpleIsEqual = function (newArgs, lastArgs) {
return newArgs.length === lastArgs.length &&
newArgs.every(function (newArg, index) {
return shallowEqual(newArg, lastArgs[index]);
});
};
export default function (resultFn, isEqual) {
if (isEqual === void 0) { isEqual = simpleIsEqual; }
var lastThis;
var lastArgs = [];
var lastResult;
var calledOnce = false;
var result = function () {
var newArgs = [];
for (var _i = 0; _i < arguments.length; _i++) {
newArgs[_i] = arguments[_i];
}
if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {
return lastResult;
}
lastResult = resultFn.apply(this, newArgs);
calledOnce = true;
lastThis = this;
lastArgs = newArgs;
return lastResult;
};
return result;
}