鉴于这种代码:这段代码为什么不导致递归?
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
是的,我在回答中想到的很好的例子。 – 2013-05-04 19:19:54
马上就不会有这么简单的例子,因为任何理智的编码器都不会编写这种类型的代码... – 2013-05-04 19:20:38
我一直在JavaScript中测试自动化编码8年,今天是第一个我曾经见过这样的结构,这使我很难理解。 – 2013-05-04 19:27:36
它不是自称,只是检查地看到,通过可变那个名字存在/是真的。该函数可以重命名,foo可以在被调用的时候完全引用其他东西。
所以要清楚,当一个函数调用自身发生递归
function foo(){
foo();
}
,而你正在做的是刚刚抬头foo的电流值,而不尝试调用它。
!foo //if foo is defined as a function or other truthy object, is true
必须调用/调用/应用函数对象。用'()' - 递归发生。请记住,JavaScript中的函数只是对象。表达式'foo'只是求值(在这里是一个函数对象),而'foo()'计算foo,然后应用函数运算符(它将“调用foo”)。 – user2246674 2013-05-04 19:15:26