function fibonacci(n) {
return (function(a, b, i) {
return (i < n) ? arguments.callee(b, a + b, i + 1) : a;
})(1, 1, 1);
}
Эй, я новичок, я мог бы понять математику логической частью этой функции, что я не понимаю, это параметр, проходящий прогресс, его проходит (1,1,1) к функции (abi), что кажется не очень нормальным.Javascript: О Return()() формат хвостовой рекурсии в функции Фибоначчи
function fibonacci(n) {
return (function(a, b, i) {
return (i < n) ? arguments.callee(b, a + b, i + 1) : a;
})
regular function pass a parameter like the way function(1 1 1)
}
Я не могу понять это, я попытался абстрагировать в наконец формате
, но как это может передать параметр, я предполагаю, что это что-то о обратном вызове не может справиться вызов функции после него, который также работает в нем.
Итак, есть ли какие-то базовые вещи, которые я не знал? Как какой-то формат по умолчанию, как записи в MDN?
Thnx много.
Это почти невозможно понять, о чем вы говорите. Что путает насчет передачи трех параметров функции, которая определяется как ожидающая 3 параметра? – Pointy
Также обратите внимание, что использование аргументов.callee' - довольно плохая идея, поэтому вы должны быть подозрительными, где бы вы ни находили этот образец кода. – Pointy
'return (function (a, b) {...}} (1,2);' эквивалентно функции foo (a, b) {...}; return foo (1,2); '. Мы просто заменили переменную ('foo') на само определение функции и удалили имя функции. Это не имеет никакого отношения к' return'. Упрощенный, но эквивалентный пример: вместо записи результата var var =/\ d /; var = pattern.test (value); 'вы можете напрямую использовать литерал выражения, не вводя новую переменную' pattern': 'var result = /\d/.test (value);'. –