天天看點

setinterval是同步還是異步的問題

雖然經常使用setInterval定時器方法,但沒有注意過它是否是異步或同步的問題,因為以前寫的關于setInterval的代碼,基本模式是這樣的:

setInterval(function(){//do something...},1000);

,是以在這種情況下是觀察不到異步和同步的問題的,直到有一次我寫了這樣的代碼:

setInterval(function(){//do something...},1000);//do an other thing

我發現我的代碼并沒有如我剛開始預期的那樣先執行完setInterval中的代碼,最後再do an other thing,而是跳過setInterval後直接do an other thing。hin顯然這和我當時剛開始接觸ajax後遇到的問題(ajax也是異步的)一樣,是以setInterval是異步執行的。

測試代碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<button onclick="changeValue();">change</button>
</body>
<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
    var value = ;
    $(function () {
        var temp;   //代碼A
        var interval = setInterval(function () {    //代碼B
            console.log("interval執行,目前value=" + value);
            if (value > ) {
                temp = value;
                clearInterval(interval);    //終止循環
            }
        }, );
        console.log("temp=" + temp);    //代碼C
    });
    function changeValue() {
        value++;
    }
</script>
</html>
           

運作結果

setinterval是同步還是異步的問題

參考:http://www.cnblogs.com/ppforever/p/4344912.html?tvd

繼續閱讀