自动memoization
function memoize(func) {
let memo = {};
let slice = Array.prototype.slice;
return function() {
let args = slice.call(arguments);
if (args in memo) {
return memo[args];
} else {
return memo[args] = func.apply(this, args);
}
};
}