簡體   English   中英

JavaScript setTimeout可以在某些對象類型上正常運行嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM