[英]JavaScript setTimeout runs fine on some object types by not others?
最好用一個代碼示例來解釋。
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”和“ non-static”對象,但我覺得那是不對的。)
函數是JavaScript中的一等公民。 給定這樣定義的函數:
function foo()
{
return 0;
}
兩者之間有區別:
var result = foo();
和這個:
var result = foo;
第一個調用名為foo
的函數,並將該調用返回的值分配給result
。 在這種情況下, result
將等於零。
第二個將result
分配給名為foo
的函數。 現在, result
不等於零; result
等於函數foo
。
您現在在代碼中看到問題了嗎?
setTimeout(this.testLoop(), 1000);
應該設置為setTimeout(this.testLoop, 1000);
您想要的功能,而不是其返回值。
改變這條線
setTimeout(this.testLoop(), 1000);
至
setTimeout(this.testLoop, 1000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.