Обновление
Ваш обновленный код сильно отличается от вашего исходного кода.Кажется, проблема в том, что вы передаёте строку setTimeout
(что удивило меня, но было легко воспроизведено).Я бы изменил
function First () {
setTimeout("Second()", 50)
};
на
function First () {
setTimeout(Second, 50);
}
... или если вам нужно передать параметры в Second
:
function First() {
setTimeout(function() {
Second(param0, param1);
}, 50);
}
(обратите внимание, что естьнет необходимости в ;
в конце объявления функции, но один после setTimeout
не сработает [вам на самом деле не нужно , ужас - «вставка точки с запятой»вставит его для вас в этом случае, но ...].)
Во второй и третьей версиях выше используется ссылка на функцию.Ваш оригинал использует строку, которая затем компилируется, что является ненужным и, по-видимому, является проблемой (поскольку этот пример с использованием строки завершается с ошибкой , но этот со ссылкой на функцию работает ).
Оригинальный ответ
В ответе ниже код, указанный в вашем вопросе, был:
function First() {Second();};
function Second() {First();};
Этот код будет работать очень хорошо.Это бесконечный цикл (ну, не бесконечный , потому что в итоге у реализации не будет больше места в стеке для адресов возврата), но пока он не взорвется из-за этого, он будет работать нормально. Пример
Не удастся, если ваш фактический код будет выглядеть примерно так:
var First = function() {
Second();
};
First();
var Second = function() {
First();
};
... потому что он сильно отличается, он используетфункция выражения (которые обрабатываются как часть пошагового кода), а не функция декларации (которые обрабатываются при входе в область действия, перед любым пошаговымкод) и имеет вызов First
до определения Second
.См. этот другой ответ здесь в StackOverflow для более подробной информации о различии между выражением функции и объявлением функции.