2015-01-09 91 views
0

setTimeout函數似乎它不工作到一個無限循環: 這裏我以下使用了setTimeout函數,但它返回值沒有任何所需的延遲。爲什麼setTimeout函數似乎不能用於無限循環?

這裏來源:

var Slider = new function() { 
    var that = this; 
    for (var i = 1; i < 6; i++) { 
     var a = myFunction(i); 
     alert(a); 
     if (i == 5) { 
      i = 0; 
     } 
    } 
}; 
function myFunction(n) { 
    setTimeout(function() { 
     return n; 
    }, 3000); 
}; 
+1

似乎你有一個無限循環開始。那麼你怎麼能通過使用'alert()'來做任何調試? – j08691

+0

'myFunction()'將總是立即返回,沒有返回值。稍後,內部函數將返回'n',但該值將被忽略,並且與'Slider'中的任何代碼無關。 –

+0

'myFunction'不返回任何值。 'a'值是不確定的。我沒有清楚地理解你想要做什麼 –

回答

0

它corrcetly工作,如果( - )是一個secont然後從功能myFunction的輸出返回

--- output 
    --- output 
    --- output 
    --- output 
    --- output 

var Slider = new function() { 
    var that = this; 
    for (var i = 1; i < 6; i++) { 
     var a = myFunction(i); 

     if (i == 5) { 
      i = 0; 
     } 
    } 
}; 
function myFunction(n) { 
    setTimeout(function() { 
     alert(n); 
    }, 3000); 
}; 

如果您使用此代碼,那麼你就可以清除

--- output 
    ------ output 
    --------- output 
    ------------ output 
    --------------- output 

    var Slider = new function() { 
    var that = this; 
    for (var i = 1; i < 6; i++) { 
     var a = myFunction(i); 

     //if (i == 5) { 
     // i = 0; 
     //} 
    } 
}; 
function myFunction(n) { 
    setTimeout(function() { 
     alert(n); 
    }, (n*3000)); 
}; 

我停止無限循環,它也適用於無限循環。

1

首先,您的return n呼叫將返回值回調到setTimeoutmyFunction沒有返回任何東西。所以你在a中得到的價值可以是任何東西。

其次,setTimeout在給定的超時後執行一段代碼,但不會阻止當前的執行。這意味着您撥打myFunction後,您的alert(a)將立即被呼叫,然後在3秒後,setTimeout回撥將被執行。