Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 1 год назад.
var d = {};
function bind(f, arg1) {
return function() {
var start = performance.now();
var func = f.apply(this, arguments)
if (!d[arg1]) {
d[arg1] = 0;
}
d[arg1] += performance.now() - start;
return func
}
}
var fibonacci = function f(n) {
return (n > 2) ? f(n - 1) + f(n - 2) : 1;
}
var fibonacci = bind(fibonacci, "fibo");
console.log(fibonacci(10)); // 55
console.log(d.fibo + ' мс ');
var d = {};
function bind(f, arg1) {
return function() {
var start = performance.now();
var func = f.apply(this, arguments)
if (!d[arg1]) {
d[arg1] = 0;
}
d[arg1] += performance.now() - start;
return func
}
}
var fibonacci = function f(n) {
return (n > 2) ? f(n - 1) + f(n - 2) : 1;
}
var q = bind(fibonacci, "fibo");
console.log(q(10)); // 55
console.log(d.fibo + ' мс ');
Потому что в первом примере:
var fibonacci = bind(fibonacci, "fibo");
а во втором:
var q = bind(fibonacci, "fibo");
Измените во втором примере
console.log(fibonacci(10)); // 55
на
console.log(q(10)); // 55
получается функцию
var fibonacci = function f(n) { return (n > 2) ? f(n - 1) + f(n - 2) : 1; }
мы переписали а как тогда мы получаем результат ?
Результат мы получаем, потому что замыкание, созданное внутри bind, содержит ссылку на старую функцию fibonacci, которую мы туда передали.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости