最好用代码示例解释这个......
Object_A = {
testLoop:function(){
log("running");
setTimeout(Object_A.testLoop, 1000);
}
};
Object_B = function(){
this.testLoop= function(){
log("running");
setTimeout(this.testLoop(), 1000);
}
}
Object_A.testLoop(); // logs message to console every 1000ms, as you would expect
var objB = new Object_B();
objB.testLoop(); // runs infinitely at once (no 1000ms interval) until "Maxium call stack size exceeded"
为什么循环在静态对象中工作正常但在声明生成函数的“类类”对象中却没有?
(旁注:这两种对象的正确名称是什么?我一直说“satic”和“非静态”对象,但我觉得这是不正确的。)
答案 0 :(得分:2)
函数是JavaScript中的一等公民。给定一个如下定义的函数:
function foo()
{
return 0;
}
这有不同之处:
var result = foo();
和此:
var result = foo;
第一个调用名为foo
的函数,并将该调用返回的值赋给result
。在这种情况下,result
将等于零。
第二个将result
分配给名为foo
的函数。现在,result
不等于零; result
等于函数foo
。
您现在在代码中看到了问题吗?
答案 1 :(得分:1)
setTimeout(this.testLoop(), 1000);
应该是setTimeout(this.testLoop, 1000);
,因为你想要的是函数,而不是它的返回值。
答案 2 :(得分:1)
更改此行
setTimeout(this.testLoop(), 1000);
到
setTimeout(this.testLoop, 1000);