Я прохожу через «Javascript: окончательное руководство» Дэвида Фланагана.Почему функция memoize в «JS: Окончательное руководство» Д. Фланагана нужна аргументы.length?
В пункте 8.8.4 он показывает функцию высшего порядка, memoize()
, который принимает функцию в качестве аргумента и возвращает memoized версии функции:
//Return a memoized version of f.
// It only works if arguments to f all have distinct string representations.
function memoize(f) {
var cache = {}; // Value cache stored in the closure.
return function() {
// Create a string version of the arguments to use as a cache key.
var key = arguments.length + Array.prototype.join.call(arguments,",");
if (key in cache) return cache[key];
else return cache[key] = f.apply(this, arguments);
}
}
В объяснении есть: «Возвращенный функция преобразует массив аргументов в строку ".
Если нам нужны только аргументы, почему он объединяет arguments.length
с Array.prototype.join.call(arguments, ",")
вместо преобразования массива аргументов в строку?
потому что он используется позже для доступа к кешу вызовов. И есть разница, если вы вызываете метод с различным количеством параметров. –