成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS setTimeout 與 setInterval

wupengyu / 2597人閱讀

摘要:它們將被傳入推遲執(zhí)行的函數(shù)以下不支持更多的參數(shù),可以用或?qū)崿F(xiàn)被推遲執(zhí)行的回調(diào)函數(shù)是在全局環(huán)境執(zhí)行,這有可能不同于函數(shù)定義時的上下文環(huán)境。

事件流逝觸發(fā)的事件

這類事件不是基于用戶針對可見Web頁面元素執(zhí)行的行為,而是基于時間的流逝。
和JavaScript中所有其他事件一樣,這些時間流逝事件也是由函數(shù)處理的。

setTimeout()

撿重點說了

setTimeout允許添加更多的參數(shù)。它們將被傳入推遲執(zhí)行的函數(shù)

        setTimeout(function(a,b){
            alert(a+b);
        },1000,2,5)            // 7

IE9以下不支持更多的參數(shù),可以用apply或bind實現(xiàn)

setTimeout推遲執(zhí)行的回調(diào)函數(shù)是在全局環(huán)境執(zhí)行,這有可能不同于函數(shù)定義時的上下文環(huán)境。

        var x = 1;
        var o = {
            x: 2,
            y:function(){console.log(this.x);}
        };
        
        setTimeout(o.y,1000);        // 1
        
        // 另一個例子
        
        function User(login) {
          this.login = login;
          this.sayHi = function() {
            console.log(this.login);
          }
        }
        
        var user = new User("John");       
        setTimeout(user.sayHi, 1000);

this.login會報錯,因為取不到值。

一種解決方法是將user.sayHi放在函數(shù)作用域內(nèi)執(zhí)行,而不是在全局作用域中。

       setTimeout(function(){
            user.sayHi();
        }, 1000);    // "John"

另一種方法,就是采用閉包,將this與當(dāng)前作用域綁定。

        document.getElementById("click-ok").onclick = function() {
          var self = this;
          setTimeout(function() { 
            self.value="OK";
          }, 100);
        }
        // setTimeout指定的函數(shù)中的this,總是指向定義時所在的DOM節(jié)點。
        
setInterval()

setInterval指定某個任務(wù)每隔一段時間就執(zhí)行一次,也就是無限次的定時執(zhí)行。

    
                    
閱讀需要支付1元查看
<