Вы можете настроить отображение 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)
Но 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
.
Когда находку называют в findSequence, она имеет доступ к переменной цели, которая установлена в определении findSequence. Простой пример этого:
function outerFunction() {
var a = 2;
function innerFunction() {
alert(a);
}
innerFunction();
}
outerFunction();
Переменная запуска определяется, когда она делает:
return find(1, "1");
Эффективно имея начальную переменную запуска 1, переменную цели 24 и историю "1" на первичной обработке.
Править: На комментарий Rob закрытия не на самом деле, что вызывает это здесь, как находят (), не выполняется за пределами findSequence (), обзор заставляет цель быть найденной.
Если я понимаю Ваш вопрос правильно: заключительная строка кода называет findSequence (), с целью 24. В findSequence () существует вызванная функция, находят (), который определяют и затем называют в операторе возврата для findSequence с запуском, равняющимся 1, и история, равняющаяся 1.