整理的一些常见问题
1、 什么是閉包?閉包有什么作用?
var a=1; function (){a++;return a; }復制代碼一個變量,一個函數,在函數里可以訪問到變量,這就叫閉包,即如果一個函數引用了除了它自身內部變量外的變量,這個外部變量和這個函數就形成了一個閉包。
閉包的作用:
從外部讀取函數內部變量,讓這些變量始終保持在內存中:
閉包使內部變量記住上一次的運算結果,不會因為沒有被直接引用而被瀏覽器的垃圾回收機制回收。
同時閉包也可以用來封裝對象的私有屬性和方法:
function fn1(n){return function fn2(){return n++;} } var fn3=fn1(1); fn3()//1 var fn4=fn1(2); fn4()//2 //fn3和fn4互不影響,各自返回不同的數值復制代碼2、call、apply、bind 的用法分別是什么?
相同點:
接受的第一個參數都是this,都能改變this 的指向。
區別:
call可以接受第二個,第三個,第N個參數,apply接受的第二個參數是一個數組,bind和call可以接受的參數一樣,但是bind的返回值是一個函數,也就是就算傳參數進去也不會立即執行,還需要再次調用執行一次函數才算真正的執行。
3、幾個常用的HTTP狀態碼
狀態碼200表示請求成功
狀態碼202表示服務器成功接收請求
狀態碼301表示被請求的資源已經永久移動到新位置
狀態碼302表示被請求的資源暫時不可以訪問,以后可以再訪問
狀態碼400表示請求報文中存在語法錯誤
狀態碼404表示請求失敗,請求所希望得到的資源沒有在服務器上找到
狀態碼500表示服務器錯誤
狀態碼502表示作為網關或代理工作的服務器嘗試執行請求時,從上游服務器得到無效的響應
4、寫出一個http請求和響應
HTTP請求常見格式,分為四部分:
第一部分:請求方式(get/post)? 路徑(/path)? 協議/版本號(HTTP/1.1)
第二部分:鍵值對(key:value)
第三部分:回車符
第四部分:請求的數據
1 POST /path HTTP/1.1 2 Host:www.baidu.com 2 Content-Length: 24 2 Content-Type: application/x-www-form-urlencoded 3 4 username=ff&password=123復制代碼HTTP響應常見格式,分為四部分:
第一部分:協議/版本號(HTTP/1.1) 狀態碼? ?狀態碼解釋?
第二部分:鍵值對(key:value)
第三部分:回車符
第四部分:響應數據(根據第二部分的Content-Type決定該部分的內容格式)
1 HTTP/1.1 200 ok 2 Content-Length: 200 2 Content-Type: text/html 3 4 <html>...</html>復制代碼5、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?
5-1.DNS解析:瀏覽器根據URL中的域名查找對應的IP地址。
5-2.TCP連接:瀏覽器根據IP地址向服務器發起TCP連接,產生三次握手:
(1)瀏覽器向服務器發起連接請求
(2)服務器接到請求,回復同意連接
(3)瀏覽器接到服務器返回的確認連接信息,再次確認,正式建立連接。
5-3.發送http請求:建立連接后,瀏覽器發送http請求,包括請求行,請求頭,請求數據內容
5-4.服務器處理請求并返回響應內容
5-5.瀏覽器渲染頁面:瀏覽器收到響應開始解析渲染頁面,先解析html構建DOM樹,再解析? css構建規則樹,根據樹然后繪制頁面。
5-6.關閉連接或者繼續保持連接
6、如何實現數組去重?
假設有數組 array = [1,5,2,3,4,2,3,1,3,4]
你要寫一個函數 unique,使得
unique(array) 的值為 [1,5,2,3,4]
也就是把重復的值都去掉,只保留不重復的值。
要求:
ES5:
var array = [1,5,2,3,4,2,3,1,3,4]; function unique(arr){var newArray = [];var hasharr={};for (var i = 0; i < arr.length; i++) {if (hasharr[arr[i] ]===undefined) {newArray.push(arr[i]);hasharr[arr[i]]=1;}}return newArray; } unique(array); 復制代碼ES6:
var array = [1,5,2,3,4,2,3,1,3,4]; function unique(arr){return Array.from(new Set(arr)); } unique(array);復制代碼7、JSON 和 JavaScript 是什么關系?JSON 和 JavaScript 的區別有哪些?
關系:JSON 是一門借鑒 JavaScript 的語言,同時也是一種數據交互格式,JSON 是 JavaScript 的子集(或者說 JSON 只借鑒了一部分 JavaScript 語法,而且沒有新增任何原創的語法)
區別:JSON 不支持函數、undefined、變量、引用、單引號字符串、對象的key不支持單引號也不支持不加引號、沒有內置的 Date、Math、RegExp 等。
而 JavaScript 全都支持。
8、什么是 JSONP?
JSONP是一種跨域請求數據方式,原理是動態創建script標簽,利用script發送請求不受同源策略限制的特性,實現的過程是:
1.請求方即瀏覽器在頁面創建一個script標簽指向響應地址,同時傳遞一個查詢參數callback=函數名,這個函數里可以自己定義處理參數的過程
2.響應方根據前端頁面傳過來的查詢參數,創建一個形如:函數名.call('undefined',{key:value,key:value,......})或者 函數名({key:value,key:value,......})這樣的響應
3.瀏覽器收到響應,調用函數,按照自己定義的方式來處理接收到的數據
9、JSONP 為什么不支持 POST
因為JSONP的使用原理是動態創建script標簽,利用script發送請求不受同源策略限制的特性來實現跨域請求數據,而動態創建的script標簽只能發送get請求,不支持post。
10、有哪些可以發請求的標簽?
form可以發post和get請求,會刷新或新打開頁面 。a只能發get,會刷新或新打開頁面。 img只能發get,只能以圖片形式顯示。 link只能發get,必須放在頁面里才能發,只能以css或者favicon形式展示 。script只能發get,必須放在頁面里,但是只能以腳本的形式運行。
11、什么是前端MVC?
Model(模型)-- View(視圖)--Controller(控制器)
MVC 就是一種有規律的代碼規范,把代碼按照三層的結構進行梳理,更清晰易懂,具體就是:
Model 數據管理,包括數據邏輯、數據請求、數據存儲等功能。前端 Model 主要負責 AJAX 請求或者 LocalStorage 存儲
View 負責用戶界面,前端 View 主要負責 HTML 渲染。
Controller 負責處理 View 的事件,并更新 Model;也負責監聽 Model 的變化,并更新 View,Controller 控制其他的所有流程。
流程:
用戶在視圖層進行操作,然后控制器監聽到視圖層的操作,向模型層請求調用數據,模型層收到請求向服務器發出請求調用數據,服務器把數據響應給模型層,模型層再把數據返回給控制器,控制器更新視圖層數據。
12、在 ES5 中如何用函數模擬一個類?
function Person(options){// 此處可以添加不同的私有屬性this.name=namethis.age=age... } // 此處設置Person類的公有屬性 Person.prototype.walk=function(){console.log('walk')} Person.prototype.gender="woman"var person1=new Person({name:'hi',age:'18'})復制代碼13、怎樣使用Promise?
window.myFunction=function(options){return new Promise(function(resolve,reject){if(success){resolve.call(this,responseText)}else{reject.call(this,errorText)}}) }window.myFunction(options).then((responseText)=>console.log(responseText),//resolve(errorText)=>console.log(errorText)//reject )復制代碼14、請使用原生 JS 寫出一個 AJAX 請求(代碼中必須出現 XMLHttpRequest)
let request=new XMLHttpRequest(); request.open('GET','/path'); request.send(); request.onreadystatechange=function(){if(request.readyState===4){if(request.status>=200&&request.status<300){console.log('success');}else if(request.status>=400){console.log('failed');}} }復制代碼15、關于Cookie、Session和Localstorage
cookie和session的關系 :一般來說,session是基于cookie實現的??
cookie和Localstorage的區別 :cookie每次都會被帶給服務器,帶給每個頁面,但是localstorage不會,跟http無關,只被存儲在本地 cookie一般最大4K左右,localstorage最大5MB 跟瀏覽器有關?
Localstorage和sessionStorage的區別 :sessionStorage在用戶關閉頁面以后即Session(會話)結束以后就會失效,Localstorage只要用戶不主動清理緩存就會永久有效?
expries和cache-control區別:expries是以前的用法,expires表示什么時候過期,cache-control表示過多久過期,expires表示的時間是用戶本地時間,如果用戶本地時間錯亂就會出問題,所以優先使用cache-control?
ETAG和cache-control區別 :cache-control直接不請求,ETAG請求但是不下載
總結
- 上一篇: Spring+ Spring cloud
- 下一篇: Shiro初识