1.javaScript 的 Dom 節(jié)點(diǎn)操作創(chuàng)建得糜、插入、刪除繁扎、復(fù)制幔荒、查找
一、創(chuàng)建節(jié)點(diǎn)、追加節(jié)點(diǎn)
1铺峭、createElement(標(biāo)簽名)創(chuàng)建一個(gè)元素節(jié)點(diǎn)(具體的一個(gè)元素)墓怀。
2、createTextNode(節(jié)點(diǎn)文本內(nèi)容)創(chuàng)建一個(gè)文本節(jié)點(diǎn)
3卫键、createDocumentFragment()? //創(chuàng)建一個(gè) DOM 片段
4傀履、appendChild(節(jié)點(diǎn))追加一個(gè)節(jié)點(diǎn)
二、插入節(jié)點(diǎn)
1莉炉、appendChild(節(jié)點(diǎn))也是一種插入節(jié)點(diǎn)的方式钓账,還可以添加已經(jīng)存在的元素,會(huì)將其元素從原來(lái)的位置移到新的位置絮宁。
2梆暮、insertBefore(a,b)是參照節(jié)點(diǎn),意思是a 節(jié)點(diǎn)會(huì)插入 b 節(jié)點(diǎn)的前面绍昂。
三啦粹、刪除、移除節(jié)點(diǎn)
1窘游、removeChild(節(jié)點(diǎn)) 刪除一個(gè)節(jié)點(diǎn)唠椭,用于移除刪除一個(gè)參數(shù)(節(jié)點(diǎn))。其返回的被移除的節(jié)點(diǎn)忍饰,被移除的節(jié)點(diǎn)仍在文檔中贪嫂,只是文檔中已沒(méi)有其位置了。
四艾蓝、復(fù)制節(jié)點(diǎn)
cloneNode() 方法力崇,用于復(fù)制節(jié)點(diǎn), 接受一個(gè)布爾值參數(shù)赢织, true 表示深復(fù)制(復(fù)制節(jié)點(diǎn)及其所有子節(jié)點(diǎn))亮靴, false 表示淺復(fù)制(復(fù)制節(jié)點(diǎn)本身,不復(fù)制子節(jié)點(diǎn))
1于置、replaceChild(插入的節(jié)點(diǎn)台猴,被替換的節(jié)點(diǎn)) ,用于替換節(jié)點(diǎn)俱两,接受兩個(gè)參數(shù),第一參數(shù)是要插入的節(jié)點(diǎn)曹步,第二個(gè)是要被替換的節(jié)點(diǎn)宪彩。返回的是被替換的節(jié)點(diǎn)。
六讲婚、查找節(jié)點(diǎn)
1尿孔、getElementsByTagName()? ? ?//通過(guò)標(biāo)簽名稱(chēng)
2、 getElementsByName()? ? ?//通過(guò)元素的 Name 屬性的值(IE 容錯(cuò)能力較強(qiáng),會(huì)得到一個(gè)數(shù)組活合,其中包括 id 等于 name 值的)
3雏婶、getElementById()? ? //通過(guò)元素 Id,唯一性
2.請(qǐng)說(shuō)說(shuō)事件委托機(jī)制白指?這樣做有什么好處留晚?
答、事件委托告嘲,就是某個(gè)事件本來(lái)該自己干的错维,但是自己不干,交給別人來(lái)干橄唬。就叫事件委托赋焕。打個(gè)比方:一個(gè) button 對(duì)象,本來(lái)自己需要監(jiān)控自身的點(diǎn)擊事件仰楚,但是自己不來(lái)監(jiān)控這個(gè)點(diǎn)擊事件隆判,讓自己的父節(jié)點(diǎn)來(lái)監(jiān)控自己的點(diǎn)擊事件。
好處:A僧界,提高性能:列如侨嘀,當(dāng)有很多 li 同時(shí)需要注冊(cè)事件的時(shí)候,如果使用傳統(tǒng)方法來(lái)注冊(cè)事件的話(huà)捎泻,需要給每一個(gè) li 注冊(cè)事件飒炎。然而如果使用委托事件的話(huà),就只需要將事件委托給該一個(gè)元素即可笆豁。這樣就能提高性能郎汪。
B,新添加的元素還會(huì)有之前的事件闯狱;
3.JavaScript 中的作用域煞赢、預(yù)解析與變量聲明提升?
作用域:
就是變量的有效范圍哄孤。
如何檢測(cè)一個(gè)變量的作用域:在指定的區(qū)域內(nèi)使用這個(gè)變量照筑,如果不報(bào)錯(cuò),說(shuō)明這個(gè)變量的作用域包含此區(qū)域瘦陈。
函數(shù)作用域:只有函數(shù)能夠劃分變量的作用域凝危,這種作用域的規(guī)則就叫函數(shù)作用域。
如果在函數(shù)內(nèi)訪(fǎng)問(wèn)一個(gè)變量晨逝,優(yōu)先找局部變量和形參,如果沒(méi)有找到蛾默,去定義該函數(shù)的環(huán)境中查找,直到全局為止捉貌。
在 ES6 之前鼓择,只有函數(shù)可以劃分變量的作用域,所以在函數(shù)的外面無(wú)法訪(fǎng)問(wèn)函數(shù)內(nèi)的變量支竹。在 ES6 之前,沒(méi)有塊級(jí)作用域的概念急前,所以在代碼塊的外面可以訪(fǎng)問(wèn)代碼塊內(nèi)的變量
塊級(jí)作用域:凡是代碼塊就可以劃分變量的作用域,這種作用域的規(guī)則就叫塊級(jí)作用域瀑构。
塊級(jí)作用域 函數(shù)作用域 詞法作用域之間的區(qū)別:
1裆针、塊級(jí)作用域和函數(shù)作用域描述的是,什么東西可以劃分變量的作用域
2检碗、詞法作用域描述的是据块,變量的查找規(guī)則。之間的關(guān)系:
(1) 折剃、 塊級(jí)作用域 包含 函數(shù)作用域另假。
(2) 、 詞法作用域 與 塊級(jí)作用域怕犁、函數(shù)作用域之間沒(méi)有任何交集边篮,他們從兩個(gè)角度描述了作用域的規(guī)則。
ES6 之前 js 采用的是函數(shù)作用域+詞法作用域奏甫,ES6 js 采用的是塊級(jí)作用域+詞法作用域
預(yù)解析:
在代碼整體執(zhí)行之前戈轿,先解析一部分。
預(yù)解析之后阵子,代碼才會(huì)從上往下依次整體執(zhí)行思杯,但是預(yù)解析執(zhí)行過(guò)的代碼不會(huì)重復(fù)執(zhí)行。
js 預(yù)解析干了什么事:
js 中預(yù)解析會(huì)把聲明部分的代碼預(yù)先執(zhí)行挠进。
聲明相關(guān)的代碼可以分為兩部分:
1色乾、 變量聲明
通過(guò) var 關(guān)鍵字定義的變量。
2领突、函數(shù)聲明
通過(guò) function 關(guān)鍵字聲明的函數(shù)
預(yù)解析時(shí)如果遇到重復(fù)的變量聲明暖璧,那么忽略。
預(yù)解析時(shí)如果遇到重復(fù)的函數(shù)聲明君旦,保留后面的函數(shù)澎办。
預(yù)解析時(shí)如果遇到變量與函數(shù)重名的情況,保留函數(shù)金砍。
變量聲明提升:
使用 var 關(guān)鍵字定義的變量局蚀,被稱(chēng)為變量聲明;
函數(shù)聲明提升的特點(diǎn)是恕稠,在函數(shù)聲明的前面琅绅,可以調(diào)用這個(gè)函數(shù)。