为什么这段代码不会导致递归?

时间:2013-05-04 19:13:01

标签: javascript

鉴于此代码:

function foo()
{
  if (!foo)
  {
    //blah blah blah some code here
    foo = true;
  }
}

这到底是做什么的?为什么不创建递归调用?

2 个答案:

答案 0 :(得分:3)

这可能会产生递归:

function foo()
{
  if (!foo()) // <=== notice the ()
  {
    //blah blah blah some code here
    foo = true;
  }
}

但是,没有括号,foo没有被执行。测试仅检查变量foo未评估为true,然后将其替换为布尔值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

答案 1 :(得分:0)

它没有调用自己,只是检查是否存在该名称的变量/是真的。该函数可以重命名,foo可以在调用时完全引用其他内容。

很明显,当函数调用自身时会发生递归

function foo(){

  foo();

}

而你正在做的只是查看foo的当前值而不试图调用它。

!foo  //if foo is defined as a function or other truthy object, is true