1. 程式人生 > >web前端面試知識點總結

web前端面試知識點總結

(1)button是行內元素還是塊級元素?
答:它是可變元素,既不屬於行內元素,也不屬於塊級元素。可變元素:根據上下文語境決定該元素為塊級還是內聯(可變元素如:button、iframe、map等)。

(2)行內元素有哪些?塊級元素有哪些?css盒子模型是什麼?
答:
塊級元素:div , p , form, ul, li , ol, dl, form, address, fieldset, hr, menu, table。
行內元素:span, strong, em, br, img , input, label, select, textarea, cite。
盒子模型:其本質就是一個盒子,外面包圍著HTML元素,它包括:邊距,邊框,填充,內容等,允許我們在元素之間放置其他元素。

(3)一個完整的HTTP事物是一個怎樣的過程?
答:

  1. 域名解析
  2. 發起TCP的3次握手
  3. 建立TCP連線後發起http請求
  4. 伺服器端響應http請求,瀏覽器得到html程式碼 5. 瀏覽器解析html程式碼,並請求html程式碼中的資源
  5. 瀏覽器對頁面進行渲染呈現給使用者

(4)常見的瀏覽器核心都是那些?
答:IE:trident核心 Firefox:gecko核心 Safari:webkit核心 Opera:以前是presto核心,Opera現已改用Google Chrome的Blink核心 Chrome:Blink(基於webkit,Google與Opera Software共同開發)

(5)link和@import有什麼區別:
答:
相同點:兩者都是外部引用CSS的方式。
不同點:
1:link是XHTML標籤,除了載入CSS外,還可以定義RSS等其他事務;@import屬於CSS範疇,只能載入CSS。
2:link引用CSS時,在頁面載入時同時載入;@import需要頁面網頁完全載入以後載入。
3:link是XHTML標籤,無相容問題;@import是在CSS2.1提出的,低版本的瀏覽器不支援。
4:ink支援使用Javascript控制DOM去改變樣式;而@import不支援。

(6)DOM和@BOM有什麼區別:
答:DOM文件物件型別,用來獲取或設定文件中標籤的屬性,例如獲取或者設定input表單的value值。BOM瀏覽器物件模型,用來獲取或設定瀏覽器的屬性、行為,例如:新建視窗、獲取螢幕解析度、瀏覽器版本號等。
BOM的內容不多,主要還是DOM。 由於DOM的操作物件是文件(Document),所以dom和瀏覽器沒有直接關係。

(6)請寫出jQuery繫結事件的方法:
答:jQuery中提供了四種事件監聽方法,分別是bind、live、delegate、on,對應的解除監聽的函式分別是unbind、die、undelegate、off。

(7)js 字串操作函式

concat() – 將兩個或多個字元的文字組合起來,返回一個新的字串。

indexOf() – 返回字串中一個子串第一處出現的索引。如果沒有匹配項,返回 -1 。

charAt() – 返回指定位置的字元。

lastIndexOf() – 返回字串中一個子串最後一處出現的索引,如果沒有匹配項,返回 -1 。

match() – 檢查一個字串是否匹配一個正則表示式。

substr() 函式 – 返回從string的startPos位置,長度為length的字串

substring() – 返回字串的一個子串。傳入引數是起始位置和結束位置。

slice() – 提取字串的一部分,並返回一個新字串。

replace() – 用來查詢匹配一個正則表示式的字串,然後使用新字串代替匹配的字串。

search() – 執行一個正則表示式匹配查詢。如果查詢成功,返回字串中匹配的索引值。否則返回 -1 。

split() – 通過將字串劃分成子串,將一個字串做成一個字串陣列。

length – 返回字串的長度,所謂字串的長度是指其包含的字元的個數。

toLowerCase() – 將整個字串轉成小寫字母。

toUpperCase() – 將整個字串轉成大寫字母。

(8)怎樣新增、移除、移動、複製、建立和查詢節點?

1、建立新節點
  createDocumentFragment() //建立一個DOM片段
  createElement() //建立一個具體的元素
  createTextNode() //建立一個文字節點

2、新增、移除、替換、插入
  appendChild() //新增
  removeChild() //移除
  replaceChild() //替換
  insertBefore() //插入

3、查詢
  getElementsByTagName() //通過標籤名稱
  getElementsByName() //通過元素的Name屬性的值
  getElementById() //通過元素Id,唯一性

(9)比較typeof與instanceof?
相同點:JavaScript 中 typeof 和 instanceof 常用來判斷一個變數是否為空,或者是什麼型別的。

typeof的定義和用法:返回值是一個字串,用來說明變數的資料型別。

細節:

1、typeof 一般只能返回如下幾個結果:number,boolean,string,function,object,undefined。

2、typeof 來獲取一個變數是否存在,如 if(typeof a!=“undefined”){alert(“ok”)},而不要去使用 if(a) 因為如果 a 不存在(未宣告)則會出錯。

3、對於 Array,Null 等特殊物件使用 typeof 一律返回 object,這正是 typeof 的侷限性。

Instanceof定義和用法:instanceof 用於判斷一個變數是否屬於某個物件的例項。

例項演示:

a instanceof b?alert(“true”):alert(“false”); //a是b的例項?真:假

(10) 如何理解閉包?

1、定義和用法:當一個函式的返回值是另外一個函式,而返回的那個函式如果呼叫了其父函式內部的其它變數,如果返回的這個函式在外部被執行,就產生了閉包。

2、表現形式:使函式外部能夠呼叫函式內部定義的變數。

3、例項如下:
(1)、根據作用域鏈的規則,底層作用域沒有宣告的變數,會向上一級找,找到就返回,沒找到就一直找,直到window的變數,沒有就返回undefined。這裡明顯count 是函式內部的flag2 的那個count 。

var count=10;   //全域性作用域 標記為flag1
function add(){
    var count=0;    //函式全域性作用域 標記為flag2
    return function(){
        count+=1;   //函式的內部作用域
        alert(count);
    }
}
var s = add()
s();//輸出1
s();//輸出2

4、變數的作用域
要理解閉包,首先必須理解Javascript特殊的變數作用域。

變數的作用域分類:全域性變數和區域性變數。

特點:
函式內部可以讀取函式外部的全域性變數;在函式外部無法讀取函式內的區域性變數。
函式內部宣告變數的時候,一定要使用var命令。如果不用的話,你實際上聲明瞭一個全域性變數!

5、使用閉包的注意點
濫用閉包,會造成記憶體洩漏:由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體洩露。解決方法是,在退出函式之前,將不使用的區域性變數全部刪除。
會改變父函式內部變數的值。所以,如果你把父函式當作物件(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函式內部變數的值。