Чтобы упростить объяснение, я переписал функцию в «длинную форму» ниже:
function length(str){
if (str == ''){
return 0;
}
const substr = str.substring(1);
return length(substr) + 1;
}
console.log(length('abc'));
Таким образом, с учетом ввода "abc"
, шаги выполнения следующие:
- Проверка
'abc' == ''
==> false
. - Создать
substr = 'bc'
. - Вызвать
length('bc')
: - Проверить
'bc' == ''
==> false
. - Создать
substr = 'c'
. - Invoke
length('c')
: - Check
'c' == ''
===> false
. - Create
substr = ''
. - Invoke
length('')
: - Проверка
'' == ''
===> true
- Возврат
0
.
- Работа
0 + 1
. - Возвраты
1
.
- Работа
1 + 1
. - Возврат
2
.
- Работа
2 + 1
. - Return
3
.
Как вы можете видеть, нигде в коде не возникнет конкатенация строки с номером.