Я читал статью об обертывании функций и натолкнулся на этот пример, в котором показано, как можно обернуть функцию для определения ее производительности.Может ли кто-нибудь объяснить, как эта переданная функция возвращается и вызывается? - Javascript
function profile(func, funcName) {
return function() {
var start = new Date(),
returnVal = func.apply(this, arguments),
end = new Date(),
duration = stop.getTime() - start.getTime();
console.log(`${funcName} took ${duration} ms to execute`);
return returnVal;
};
}
var profiledMax = profile(Math.max, 'Math.max');
profiledMax.call(Math, 1, 2);
// => "Math.max took 2 ms to execute"
Я смущен, потому что эти строки:
returnVal = func.apply(this, arguments),
и:
return returnVal;
Путь я смотрю на него, когда вы звоните профиля (Math.max. ..), который вернет анонимную функцию, так как же эту анонимную функцию можно вызвать с помощью аргументов? Я бы подумал, что вам нужно будет вернуться, а затем вызвать эту анонимную функцию, чтобы получить доступ к returnVal, который также является функцией? Как это:
var profiledMax = profile(Math.max, 'Math.max');
var moreProfiledMax = profiledMax();
moreProfiledMax.call(Math, 1,2)
Возвращенная анонимная функция переносит аргументы, которые будут переданы функции, которую вы хотите протестировать (profiledMax хранит эту возвращенную функцию, поэтому при вызове profiledMax функция получает аргументы). Выполняя 'returnVal = func.apply (this, arguments)', код вызывает 'func' с контекстом (this) и всеми аргументами, которые вы предоставите при его вызове. Он сохраняет результат выполнения в 'returnVal', так что возвращаемая функция может возвращать то же значение, что и те, которые вы хотите проверить. Опасайтесь, кажется, что есть ошибки, вы определяете 'end' var и используете' stop'. – Kaddath