Будет понятнее, если вы переместите b--
на собственную линию. Предполагая, что b
является положительным целым числом, код эквивалентен:
function power(a,b){
const bBeforeDecrement = b;
b--;
return bBeforeDecrement !== 0
? a * power(a,b)
: 1;
}
power
рекурсивно вызывает себя, умножая конечное возвращаемое значение на a
каждую итерацию, уменьшая b
и рекурсивновызывая себя до тех пор, пока b
не достигнет 0.
В конце возвращаемое значение будет a
умножено на себя b
раз.
Как и комментарии к комментариям, переназначение b
делает вещи более запутанными, чем нужно - было бы более разумно вместо этого вычесть 1 из b
в рекурсивном вызове:
function power(a,b){
return b > 0
? a * power(a, b - 1)
: 1;
}