JavaScript全總結之定時器&DOM的document

在javascript中,定時器有兩種寸宏,一種是setTimeout()擂红,還有一種的setTimeout()

setTimeout()

setTimeout函數(shù)用來指定某個函數(shù)或某段代碼,在多少毫秒之后執(zhí)行咸作。它返回一個整數(shù),表示定時器的編號宵睦,以后可以用來取消這個定時器记罚。
var timerId = setTimeout(func|code, delay)

  • 上面代碼中,setTimeout函數(shù)接受兩個參數(shù)壳嚎,第一個參數(shù)func|code是將要推遲執(zhí)行的函數(shù)名或者一段代碼桐智,第二個參數(shù)delay是推遲執(zhí)行的毫秒數(shù)末早。
  • 需要注意的是,推遲執(zhí)行的代碼必須以字符串的形式酵使,放入setTimeout荐吉,因為引擎內(nèi)部使用eval函數(shù),將字符串轉為代碼口渔。
    如果推遲執(zhí)行的是函數(shù)样屠,則可以直接將函數(shù)名,放入setTimeout缺脉。一方面eval函數(shù)有安全顧慮痪欲,另一方面為了便于JavaScript引擎優(yōu)化代碼,setTimeout方法一般總是采用函數(shù)名的形式攻礼,就像下面這樣业踢。
function f(){
  console.log(2);
}
setTimeout(f,1000);
// 或者
setTimeout(function (){console.log(2)},1000);

setInterval()

setInterval函數(shù)的用法與setTimeout完全一致,區(qū)別僅僅在于setInterval指定某個任務每隔一段時間就執(zhí)行一次礁扮,也就是無限次的定時執(zhí)行知举。

clearTimeout(),clearInterval()

setTimeout和setInterval函數(shù)太伊,都返回一個表示計數(shù)器編號的整數(shù)值雇锡,將該整數(shù)傳入clearTimeout和clearInterval函數(shù),就可以取消對應的定時器僚焦。

var id1 = setTimeout(f,1000);
var id2 = setInterval(f,1000);

clearTimeout(id1);
clearInterval(id2);

setTimeout和setInterval返回的整數(shù)值是連續(xù)的锰提,也就是說,第二個setTimeout方法返回的整數(shù)值芳悲,將比第一個的整數(shù)值大1立肘。利用這一點,可以寫一個函數(shù)名扛,取消當前所有的setTimeout谅年。

(function() {
  var gid = setInterval(clearAllTimeouts, 0);

  function clearAllTimeouts() {
    var id = setTimeout(function() {}, 0);
    while (id > 0) {
      if (id !== gid) {
        clearTimeout(id);
      }
      id--;
    }
  }
})();```
運行上面代碼后,實際上再設置任何setTimeout都無效了肮韧。

###運行機制

setTimeout和setInterval的運行機制是:
1. 將指定的代碼移出本次執(zhí)行踢故,等到下一輪Event Loop時,再檢查是否到了指定時間惹苗。
2. 如果到了殿较,就執(zhí)行對應的代碼;如果不到桩蓉,就等到再下一輪Event Loop時重新判斷淋纲。

這意味著,setTimeout指定的代碼院究,必須等到本次執(zhí)行的所有代碼都執(zhí)行完洽瞬,才會執(zhí)行本涕。

setTimeout的作用是將代碼推遲到指定時間執(zhí)行,如果指定時間為0伙窃,即setTimeout(f,0)菩颖,那么不會立刻執(zhí)行

setTimeout(f,0)將第二個參數(shù)設為0,作用是讓f在現(xiàn)有的任務(腳本的同步任務和“任務隊列”中已有的事件)一結束就立刻執(zhí)行为障。也就是說晦闰,setTimeout(f,0)的作用是,盡可能早地執(zhí)行指定的任務鳍怨。

#DOM
>之前呢基本上都是在講這個js的語法啊呻右,但是現(xiàn)在就把html 和js結合起來了。
文檔對象模型 (DOM) 是HTML和XML文檔的編程接口鞋喇。它給文檔(結構樹)提供了一個結構化的表述并且定義了一種方式—程序可以對結構樹進行訪問声滥,以改變文檔的結構,樣式和內(nèi)容侦香。

DOM 提供了一種表述形式將文檔作為一個結構化的節(jié)點組以及包含屬性和方法的對象落塑。從本質(zhì)上說,它將web 頁面和腳本或編程語言連接起來了罐韩。
![](http://upload-images.jianshu.io/upload_images/961879-30d442b188b865e3.gif?imageMogr2/auto-orient/strip)
要改變頁面的某個東西憾赁,JavaScript就需要獲得對HTML文檔中所有元素進行訪問的入口。這個入口伴逸,連同對 HTML 元素進行添加缠沈、移動膘壶、改變或移除的方法和屬性错蝴,都是通過DOM來獲得的

##document 對象
* 每個載入瀏覽器的HTML文檔都會成為document對象。document對象包含了文檔的基本信息颓芭,我們可以通過JavaScript對HTML頁面中的所有元素進行訪問顷锰、修改。

####document對象常用屬性
document對象有很多屬性來描述文檔信息亡问,介紹幾個常用的
* ####doctype
在書寫HTML文檔的時候第一句一般都是doctype聲明官紫,可以通過document對象獲取,沒有則返回null
`document.doctype; // <!DOCTYPE html>document.doctype.name; // "html"`

* ####head州藕、body
`document.head;`
`document.body;`
通過這兩個屬性何以分別獲取文檔的head束世,body節(jié)點
* ####activeElement
activeElement屬性返回當前文檔中獲得焦點的那個元素。
用戶通炒膊#可以使用tab鍵移動焦點毁涉,使用空格鍵激活焦點,比如如果焦點在一個鏈接上锈死,此時按一下空格鍵贫堰,就會跳轉到該鏈接

* ####documentURI穆壕、domain、lastModified
documentURI屬性返回當前文檔的網(wǎng)址
domain屬性返回文檔域名
lastModified返回當前文檔的最后修改時間

* location
location屬性返回一個只讀對象其屏,提供了當前文檔的URL信息

// 假定當前網(wǎng)址為
http://user:passwd@www.example.com:4097/path/a.html?x=111#part1
document.location.href // "http://user:passwd@www.example.com:4097/path/a.html?x=111#part1"
document.location.protocol // "http:"document.location.host // "www.example.com:4097"
document.location.hostname // "www.example.com"
document.location.port // "4097"
document.location.pathname // "/path/a.html"document.location.search // "?x=111"
document.location.hash // "#part1"
document.location.user // "user"
document.location.password // "passed"
// 跳轉到另一個網(wǎng)址
document.location.assign('http://www.google.com')
// 優(yōu)先從服務器重新加載
document.location.reload(true)
// 優(yōu)先從本地緩存重新加載(默認值)
document.location.reload(false)
// 跳轉到另一個網(wǎng)址喇勋,但當前文檔不保留在history對象中,
// 即無法用后退按鈕偎行,回到當前文檔
document.location.assign('http://www.google.com')// 將location對象轉為字符串川背,等價于document.location.href
document.location.toString()```

雖然location屬性返回的對象是只讀的,但是可以將URL賦值給這個屬性睦优,網(wǎng)頁就會自動跳轉到指定網(wǎng)址渗常。
document.location = 'http://www.example.com';// 等價于document.location.;

  • title、characterSet

title屬性返回當前文檔的標題汗盘,該屬性是可寫的
characterSet屬性返回渲染當前文檔的字符集

  • readyState

readyState屬性返回當前文檔的狀態(tài)皱碘,共有三種可能的值
loading:加載HTML代碼階段,尚未完成解析
interactive:加載外部資源階段
complete:全部加載完成

  • #######compatMode
    compatMode屬性返回瀏覽器處理文檔的模式隐孽,可能的值為
    BackCompat:向后兼容模式癌椿,也就是沒有添加DOCTYPE
    CSS1Compat:嚴格模式,添加了DOCTYPE

  • #######cookie
    cookie是存儲在客戶端的文本菱阵,后續(xù)在客戶端存儲章節(jié)會介紹到

  • innerText

innerText是一個可寫屬性踢俄,返回元素內(nèi)包含的文本內(nèi)容,在多層次的時候會按照元素由淺到深的順序拼接其內(nèi)容
<div> <p> 123 <span>456</span> </p></div>
外層div的innerText返回內(nèi)容是 "123456"

  • innerHTML晴及、outerHTML

innerHTML屬性作用和innerText類似都办,但是不是返回元素的文本內(nèi)容,而是返回元素的HTML結構虑稼,在寫入的時候也會自動構建DOM
<div> <p> 123 <span>456</span> </p></div>
外層div的innerHTML返回內(nèi)容是 "<p>123<span>456</span></p>"
outerHTML 返回內(nèi)容還包括本身

  • #######document對象常用方法
  • open()琳钉、close()
    document.open方法用于新建一個文檔,供write方法寫入內(nèi)容蛛倦。它實際上等于清除當前文檔歌懒,重新寫入內(nèi)容
    document.close方法用于關閉open方法所新建的文檔。一旦關閉溯壶,write方法就無法寫入內(nèi)容了及皂。
  • write()
    document.write方法用于向當前文檔寫入內(nèi)容。只要當前文檔還沒有用close方法關閉且改,它所寫入的內(nèi)容就會追加在已有內(nèi)容的后面验烧。
document.open();
document.write("hello");
document.write("world");
document.close();```
   1. 如果頁面已經(jīng)渲染完成再調(diào)用write方法,它會先調(diào)用open方法又跛,擦除當前文檔所有內(nèi)容碍拆,然后再寫入。
   2. 如果在頁面渲染過程中調(diào)用write方法,并不會調(diào)用open方法倔监。



需要注意的是直砂,雖然調(diào)用close方法之后,無法再用write方法寫入內(nèi)容浩习,但這時當前頁面的其他DOM節(jié)點還是會繼續(xù)加載静暂。
#####*除了某些特殊情況,應該盡量避免使用document.write這個方法谱秽。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洽蛀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疟赊,更是在濱河造成了極大的恐慌郊供,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件近哟,死亡現(xiàn)場離奇詭異驮审,居然都是意外死亡,警方通過查閱死者的電腦和手機吉执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門疯淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戳玫,你說我怎么就攤上這事熙掺。” “怎么了咕宿?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵币绩,是天一觀的道長。 經(jīng)常有香客問我府阀,道長缆镣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任肌似,我火速辦了婚禮费就,結果婚禮上诉瓦,老公的妹妹穿的比我還像新娘川队。我一直安慰自己,他們只是感情好睬澡,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布固额。 她就那樣靜靜地躺著,像睡著了一般煞聪。 火紅的嫁衣襯著肌膚如雪斗躏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天昔脯,我揣著相機與錄音啄糙,去河邊找鬼笛臣。 笑死,一個胖子當著我的面吹牛隧饼,可吹牛的內(nèi)容都是我干的沈堡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼燕雁,長吁一口氣:“原來是場噩夢啊……” “哼诞丽!你這毒婦竟也來了?” 一聲冷哼從身側響起拐格,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤僧免,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捏浊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懂衩,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年金踪,在試婚紗的時候發(fā)現(xiàn)自己被綠了勃痴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡热康,死狀恐怖沛申,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姐军,我是刑警寧澤铁材,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站奕锌,受9級特大地震影響著觉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惊暴,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一饼丘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辽话,春花似錦肄鸽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至益咬,卻和暖如春逮诲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工梅鹦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裆甩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓齐唆,卻偏偏與公主長得像淑掌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝶念,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一抛腕、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示)媒殉,會使用HT...
    凜0_0閱讀 2,752評論 0 8
  • 第1章 認識JS JavaScript能做什么担敌?1.增強頁面動態(tài)效果(如:下拉菜單、圖片輪播廷蓉、信息滾動等)2.實現(xiàn)...
    mo默22閱讀 1,246評論 0 5
  • 一全封、概述 document節(jié)點是整個文檔樹的頂層節(jié)點,每張網(wǎng)頁都有自己的document節(jié)點桃犬。window.doc...
    周花花啊閱讀 1,308評論 0 1
  • 完全抵擋不住的美食
    親愛的小仙閱讀 137評論 1 0
  • 【原料】新鮮青蠶豆瓣100克刹悴,去皮去瓤老黃瓜500克,鹽2克攒暇,味精2克土匀,麻油適量。 【做法】①將黃瓜洗凈形用,切片就轧,放...
    美食養(yǎng)生閱讀 570評論 1 1