Учитывая этот код:Почему этот код не приводит к рекурсии?
function foo()
{
if (!foo)
{
//blah blah blah some code here
foo = true;
}
}
Что именно это сделать? Почему это не создает рекурсивный вызов?
Учитывая этот код:Почему этот код не приводит к рекурсии?
function foo()
{
if (!foo)
{
//blah blah blah some code here
foo = true;
}
}
Что именно это сделать? Почему это не создает рекурсивный вызов?
Это может создать рекурсию:
function foo()
{
if (!foo()) // <=== notice the()
{
//blah blah blah some code here
foo = true;
}
}
но без скобок, foo
не выполняется. Тест проверяет только переменную foo
не оценивается как истина, а затем заменяет ее логическим true
. Это странный код, но не рекурсия.
Обратите внимание, что мы не уверены, внутри функции, что foo
функция, так как код может выглядеть так:
function foo() {
if (!foo)
{
//blah blah blah some code here
foo = true;
}
}
var f = foo;
foo = 0;
f(); // this would result in foo being true
yep, хороший пример того, о чем я думал в своем ответе. –
Не так просто сразу приступить к такому примеру, как любой здравомыслящий кодер не пишет такой код, чтобы начать с ... –
Я занимаюсь кодированием Test Automation в JavaScript в течение 8 лет, и сегодня это первый Я все время видел эту конструкцию, и это ошеломило мой разум. –
Его не называя себя, просто проверяя, что переменная по это имя существует/правдиво. Функция может быть переименована, и foo может ссылаться на что-то еще полностью к моменту ее вызова.
Так быть ясно, рекурсия возникает, когда функция вызывает себя
function foo(){
foo();
}
а то, что вы делаете, просто глядя вверх текущее значение обув, не пытаясь вызвать его.
!foo //if foo is defined as a function or other truthy object, is true
Функциональный объект должен быть * вызван/вызван/применен * - например. с '()' - для рекурсии. Помните, что функции в JavaScript - это просто объекты. Выражение 'foo' просто оценивает значение (которое здесь является объектом функции), тогда как' foo() 'оценивает foo, а затем применяет оператор функции (который будет« вызывать foo »). – user2246674