2019前端面試自我總結js篇

1.數組有什麼方法?

  • map((item,index)=>{...})
  • splice(刪除元素的起始位置,要刪除的個數,替換元素的值)
  • slice(開始的索引,結束的索引) 截取元素
  • join('',") 將數組變成字符串,同字符串的split()方法組合使用
  • concat(數組,數組,數組...)實現數組的拼接
  • push()從後面增加一個元素,pop() 方法用於刪除並返回數組的最後一個元素
  • shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。 unshift() 方法可向數組的開頭添加一個或更多元素,並返回新的長度。

2.如何解決地獄回調?

promise  async  generator

3.localStorage和sessionstory區別

  • localStorage生命週期是永久,除非主動清除localStorage信息,否則這些信息將永遠存在。存放數據大小爲一般爲5MB,而且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信。
  • sessionStorage僅在當前會話下有效,關閉頁面或瀏覽器後被清除。存放數據大小爲一般爲5MB,而且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信。

複雜數據的存儲

存儲數據前:利用JSON.stringify將對象轉換成字符串

獲取數據後:利用JSON.parse將字符串轉換成對象

4.使用promise

1、基本用法:

(1)、首先我們new一個Promise,將Promise實例化

(2)、然後在實例化的promise可以傳兩個參數,一個是成功之後的resolve,一個是失敗之後的reject

(3)、Promise實例生成以後,可以用then方法分別指定Resolved狀態和Reject狀態的回調函數

參照 :https://www.cnblogs.com/nelson-hu/p/7777176.html 

2.promise原理:

5.Let和var的區別

  • ES6 新增了let命令,用來聲明局部變量。但是所聲明的變量,只在let命令所在的代碼塊內有效,而且有暫時性死區的約束。let不允許在相同作用域內,重複聲明同一個變量。

ES6的let讓js真正擁有了塊級作用域,也是向這更安全更規範的路走,雖然加了很多約束,但是都是爲了讓我們更安全的使用和寫代碼。

6. 閉包

一句話可以概括:閉包是有權訪問其他作用域的函數,或者子函數在外調用,子函數所在的父函數的作用域不會被釋放。

7.類 Class類繼承

(1)ES5和ES6的類有什麼區別?

ES5的類叫做構造函數,

ES6中的類只是語法糖,它並沒有改變類實現的本質。

8.事件冒泡

事件冒泡:事件到達目標節點後,會沿着捕獲階段的路線返回。同樣,所有經過的節點都會觸發對應的事件

事件捕獲:當一個事件觸發後,從window對象出發,不斷經過下級節點,直到抵達最終目標節點(event.target)。在事件達到目標節點之前就是事件捕獲的phrase。所有經過的節點都會觸發該事件。

事件委託(代理)l利用事件冒泡

參看:https://blog.csdn.net/weixin_42787326/article/details/100705808

9.Url到瀏覽器展示頁面的都經過了哪些東西

一般會經歷以下幾個過程:

1、首先,在瀏覽器地址欄中輸入url

2、瀏覽器先查看瀏覽器緩存-系統緩存-路由器緩存,如果緩存中有,會直接在屏幕中顯示頁面內容。若沒有,則跳到第三步操作。

3、在發送http請求前,需要域名解析(DNS解析),解析獲取相應的IP地址。

4、瀏覽器向服務器發起tcp連接,與瀏覽器建立tcp三次握手

5、握手成功後,瀏覽器向服務器發送http請求,請求數據包

6、服務器處理收到的請求,將數據返回至瀏覽器

7、瀏覽器收到HTTP響應

8、讀取頁面內容,瀏覽器渲染,解析html源碼

9、生成Dom樹、解析css樣式、js交互

10、客戶端和服務器交互

11、ajax查詢

 

其中,步驟2的具體過程是:

瀏覽器緩存:瀏覽器會記錄DNS一段時間,因此,只是第一個地方解析DNS請求;

操作系統緩存:如果在瀏覽器緩存中不包含這個記錄,則會使系統調用操作系統,獲取操作系統的記錄(保存最近的DNS查詢緩存);

路由器緩存:如果上述兩個步驟均不能成功獲取DNS記錄,繼續搜索路由器緩存;

ISP緩存:若上述均失敗,繼續向ISP搜索。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章