Пытаясь понять рекурсию внутри для циклов в JavaScript

Я смотрел на ответ на этот вопрос вечно, даже записывая переменные и все такое в каждой итерации. Я просто не понимаю процесс здесь. Когда я добавляю журналы консоли, я вижу, что перестановка называется input.length - 1 раз, прежде чем она попадет в эту строку input.splice (i, 0, ch); Трудно сформулировать вопрос, когда я полностью потерялся, но я предполагаю, что некоторые курьезы таковы: каждый раз, когда вызывается перестановка, это новый экземпляр этой функции с собственным закрытием, верно? поэтому изменения переменных внутри функции не будут влиять на переменные в других вызовах? функция возвращает permArr при каждом вызове? и я полагаю, что это не обязательно влияет на возврат первого вызова? (мой инстинкт подсказывает мне, что при первом возврате функция перестает работать).

Спасибо за понимание.

Перестановки в JavaScript?

var permArr = [],
usedChars = [];

function permute(input) {
  var i, ch;
  for (i = 0; i < input.length; i++) {
    ch = input.splice(i, 1)[0];
    usedChars.push(ch);
    if (input.length == 0) {
        permArr.push(usedChars.slice());
    }
    permute(input);
    input.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
};

Ответы на вопрос(2)

Ваш ответ на вопрос