官术网_书友最值得收藏!

2.12 Timer

定時器相關的API在JavaScript中已經存在了很長時間,Node中的定時器都是全局方法,無須通過require來引入。

2.12.1 常用API

JavaScript中常用的timer方法有兩個,分別是setTimeout和setInterval,在Node中,setTimeout和setInterval屬于Timeout類,調用對應的方法后都會返回相應的對象。

除了這兩個方法之外,Node還提出了新的setImmediate方法,該方法已經在第1章詳細介紹過了,這里省略相關的內容。

1.setTimeout

一個使用setTimeout方法最簡單的例子是延遲一個函數的執行時間,下面的例子中,將會在1秒后打印出Hello。

如果想要在回調執行前清除定時器,可以使用clearTimeout方法:

2.setInterval

如果想要以一個固定的時間間隔運行回調函數,可以使用setInterval方法,使用方式和setTimeout相同,對上面的代碼進行修改:

運行后會以1秒為間隔輸出Hello,同樣的,可以用clearInterval方法來清除定時器:

3.回調函數的參數

在前面定義的定時器中,第一個參數是回調方法,第二個參數是定時器的超時時間,其后面還可以定義更多的參數,多余的參數會被作為回調函數的參數。

2.12.2 定時器中的this

在JavaScript中,setTimeout和setInterval中的this均指向Windows。原因也很簡單,定時器方法的第一個參數是一個匿名函數,而JavaScript中所有匿名函數的this都指向Windows。

代碼2.39 前端JavaScript定時器中的this

在Node中,setTimeout和setInterval的this會指向timeout類,前面也曾提到,該類在setTimeout和setInterval內部創建并返回,開發者通常不會直接用到兩個類,但是可以將其打印出來。

代碼2.40 Node定時器中的this

如果在setTimeout方法內部涉及了this的指向問題,通常會使用bind或者call方法來重新綁定this,我們在第3章還會討論這個問題。

主站蜘蛛池模板: 革吉县| 集安市| 京山县| 小金县| 永寿县| 宾阳县| 凤台县| 壤塘县| 烟台市| 通道| 衡水市| 翁源县| 辽阳县| 沁水县| 东乡族自治县| 大渡口区| 慈溪市| 日喀则市| 油尖旺区| 安达市| 黄石市| 荔波县| 通州市| 衡水市| 连云港市| 三都| 林甸县| 呼和浩特市| 贵州省| 雷州市| 亳州市| 舒城县| 泽普县| 九台市| 香河县| 民和| 中江县| 虞城县| 景德镇市| 镇江市| 弋阳县|