Более четкое объяснение рекурсии и потока выполнения в JavaScript?

Вы можете настроить отображение ScriptManager в Code Behind. Что-то вроде этого. Page_PreRender это хорошее место для этого.

Dim def As New ScriptResourceDefinition()
def.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnSupportsSecureConnection = True
def.Path = "~/js/lib/MicrosoftAjax.js" ''//local resource
def.DebugPath = "~/js/lib/MicrosoftAjax.js"
def.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer"
ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjax.js", def)
5
задан ajushi 6 April 2009 в 03:11
поделиться

3 ответа

Но find не стал выполняемым без значения для start и goal. Это сначала выполнялось со значением 1 для start, и единственное значение для goal был 24.

Возможно, Вы смущены порядком операций. Там мы видим объявление функции, findSequence. Во время объявления не выполнен никакой код. findSequence функция только выполняется позже на последней строке, где результат выполнения функции распечатывается.

В объявлении findSequence, существует объявление другой функции, find. Еще раз это не становится выполняемым до позже. findSequence функция имеет всего одну исполняемую строку кода, та, которая звонит find(1, "1"). Выполнение той одной строки инициировало выполнение find некоторое количество раз, рекурсивно. find функция ссылается на goal; когда интерпретатор JavaScript выполняет код, goal всегда относится к параметру findSequence, и с тех пор в этом примере findSequence только назван однажды, goal всегда имеет то же значение, 24.

Необходимо смочь видеть, где рекурсия произошла. Если start было равно goal, затем функциональные остановки; это возвращает историю того, как это прибыло в то число. Если start больше, чем goal, затем это возвращается null, указание, что тот путь не был путем к целевому числу. Если start еще меньше, чем goal, затем функция пытается назвать себя со своим значением запуска плюс 5. Если это возвращает ненулевое значение, то это - то, что возвращается. Иначе это пытается умножиться на 3 и возвратить то значение истории вместо этого.

Обратите внимание, что, хотя этот код может возвратить много чисел, он не может возвратить все числа. Если цель 2, например, findSequence возвратится null потому что нет никакого способа запуститься в 1 и доберитесь до 2 путем добавления 5 или умножение на 3.

5
ответ дан 14 December 2019 в 13:47
поделиться

Когда находку называют в findSequence, она имеет доступ к переменной цели, которая установлена в определении findSequence. Простой пример этого:

function outerFunction() {
  var a = 2;
  function innerFunction() {
    alert(a);
  }
  innerFunction();
}
outerFunction();

Переменная запуска определяется, когда она делает:

return find(1, "1");

Эффективно имея начальную переменную запуска 1, переменную цели 24 и историю "1" на первичной обработке.

Править: На комментарий Rob закрытия не на самом деле, что вызывает это здесь, как находят (), не выполняется за пределами findSequence (), обзор заставляет цель быть найденной.

1
ответ дан 14 December 2019 в 13:47
поделиться

Если я понимаю Ваш вопрос правильно: заключительная строка кода называет findSequence (), с целью 24. В findSequence () существует вызванная функция, находят (), который определяют и затем называют в операторе возврата для findSequence с запуском, равняющимся 1, и история, равняющаяся 1.

0
ответ дан 14 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: