鉴于此代码:
function foo()
{
if (!foo)
{
//blah blah blah some code here
foo = true;
}
}
这到底是做什么的?为什么不创建递归调用?
答案 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