web典型理論整理——JS部分javascript
1.JS的兩大支柱html
2.什麼是閉包?做用和好處是什麼?與普通函數的區別?
閉包 由外部定義的內部函數,有權訪問另外一個函數做用域中的變量。閉包就是函數中的函數,裏面的函數能夠訪問外面函數的變量,外面的變量的是這個內部函數的一部分。
閉包的做用和好處前端
a.閉包給訪問外部函數定義的內部變量創造了條件。將關於函數的一切封閉到了函數內部,減小了全局變量。java
b.可使變量長期保存在內存中,生命週期比較長。程序員
c.閉包不能濫用,不然會致使內存泄露,影響網頁的性能。閉包使用完了後,要當即使用資源,將引用變量指向null。
與普通函數的區別web
a.普通函數也能曝光內部的值,可是佔用的內存沒法釋放且函數使用的變量定義到了函數外部不便於理解和管理。
b.函數每次執行時都會且只會初始化其內部變量,致使了閉包與普通函數的最大區別。
c.每次調用普通函數時他內部都會被初始化成一致狀態,致使執行結果是一致的。
閉包不一樣,它的本質是內部函數,調用閉包只會初始化內部函數變量,外部函數的變量沒有初始化,實現了變量值得傳遞。外部函數只在定義閉包時被初始化,閉包消亡時內存被收回。
3.JavaScript原型,原型鏈?有什麼特色?
原型 每一個對象都有其內部初始化的一個屬性,就是原型prototype。
原型鏈 當咱們訪問一個對象的屬性時,若是這個對象內部不存在該屬性,他就會去prototype裏找這個屬性,這個prototype又有本身的prototype,因而就有了原型鏈。
特色 JavaScript對象是經過引用來傳遞的,咱們建立的每一個新對象實體中並無一份屬於本身的原型副本。當咱們修改原型時,與之相關的對象也會繼承這一改變。ajax
4.eval做用是什麼?
a.把字符串參數解析成JS代碼並運行,並返回執行的結果;正則表達式
b.計算字符串和由JSON字符串轉換爲JSON對象的時候能夠用eval
5.JavaScript的數據類型有哪些?如何判斷?編程
數據類型
基本類型:string,number,boolean
特殊類型:undefined,null
引用類型:Object,Function,Array,Date
判斷 json
a.typeof 返回一個表示數據類型的字符串,返回結果包括:number、boolean、string、object、undefined、function等6種數據類型。
b.instanceof 會沿着原型鏈查找
c.Object.prototype.toString 原生對象和基本類型
6.如何實現JavaScript繼承?有何優缺點?
Js的繼承大致上就是兩種:對象冒充、原型方式。
經過使用繼承,程序員能夠在不一樣的子類中屢次從新使用父類中的代碼,使程序結構清晰,易於維護和修改,而子類又能夠提供一些特殊的行爲,這些特殊的行爲在父類中是沒有的 。
a.原型鏈:利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。
優勢:簡單,易於實現
缺點:來自原型對象的引用屬性是全部實例共享的;建立子類實例時,沒法向父類構造函數傳參
b.借用構造函數:在子類型構造函數的內部調用超類構造函數,經過使用call()和apply()方法能夠在新建立的對象上執行構造函數。
優勢:解決了子類實例共享父類引用屬性的問題;建立子類實例時,能夠向父類構造函數傳參
缺點:沒法實現函數複用,每一個子類實例都持有一個新的fun函數,太多了就會影響性能,內存爆炸。
c.組合繼承:將原型鏈和借用構造函數的技術組合在一塊,從而發揮二者之長的一種繼承模式。
優勢:不存在引用屬性共享問題;可傳參;函數可複用
缺點:子類原型上有一份多餘的父類實例屬性,由於父類構造函數被調用了兩次,生成了兩份,形成內存浪費
d.原型式繼承:藉助原型能夠基於已有的對象建立新對象,同時還沒必要須所以建立自定義的類型。
優勢:從已有對象衍生新對象,不須要建立自定義類型
缺點:原型引用屬性會被全部實例共享,整個父類對象來充當了子類原型對象,因此這個缺陷無可避免;沒法實現代碼複用
e.寄生式繼承:建立一個僅用於封裝繼承過程的函數,該函數在內部以某種方式來加強對象,最後再像真正是它作了全部工做同樣返回對象。
優勢:不須要建立自定義類型
缺點:沒法實現函數複用
f.寄生組合式繼承:經過借用函數來繼承屬性,經過原型鏈的混成形式來繼承方法
優勢:避免了原型鏈和借用構造函數的缺陷,融合了它們的優勢,並且,instanceof 和isPrototypeOf()也可以用於識別基於組合繼承建立的對象。
7.:befor和::before有什麼區別?
相同點 均可以用來表示僞類對象,用來設置對象前的內容。:befor和::before寫法是等效的
不一樣點 :befor是Css2的寫法,::before是Css3的寫法。:before的兼容性要比::before好 ,不過在H5開發中建議使用::before比較好。
三大特性
a.封裝 就是把客觀事物封裝成抽象的類,而且類能夠把本身的數據和方法只讓可信的類或者對象操做,對不可信的進行信息隱藏。一個類就是一個封裝了數據以及操做這些數據的代碼的邏輯實體。在一個對象內部,某些代碼或某些數據能夠是私有的,不能被外界訪問。經過這種方式,對象對內部數據提供了不一樣級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。
b.繼承 指可讓某個類型的對象得到另外一個類型的對象的屬性的方法。它支持按級分類的概念。繼承可使用現有類的全部功能,並在無需從新編寫原來的類的狀況下對這些功能進行擴展。
c.多態 是指一個類實例的相同方法在不一樣情形有不一樣表現形式。是指一個程序中同名的方法共存的狀況,調用者只需使用同一個方法名,系統會根據不一樣狀況,調用相應的不一樣方法,從而實現不一樣的功能。實現多態的方式有覆蓋和重載。
五大基本原則
a.單一職責原則 指一個類的功能要單一,不能一應俱全。
b.開放封閉原則 一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。
c.替換原則 子類應當能夠替換父類並出如今父類可以出現的任何地方。
d.依賴原則 具體依賴抽象,上層依賴下層。
e.接口分離原則 模塊間要經過抽象接口隔離開,而不是經過具體的類強耦合起來
阻止冒泡 ev.stopPropagation();
10.new操做符具體幹什麼?
a.建立一個空對象
b.設置原型鏈
c.讓Func中的this指向obj,並執行Func的函數體。
d.判斷Func的返回值類型:
11.JavaScript中this的理解?
this表示當前對象,this的指向是根據調用的上下文來決定的,默認指向window對象,指向window對象時能夠省略不寫; 調用的上下文環境包括全局和局部全局環境.
全局環境就是在<script></script>裏面,這裏的this始終指向的是window對象
局部環境(1)在全局做用域下直接調用函數,this指向的仍是window對象
(2)對象函數調用,哪一個對象調用就指向哪一個對象
(3)使用 new 實例化對象,在構造函數中的this指向實例化對象。
(4)使用call或apply改變this的指向.
12.淺談JavaScript模塊化?
模塊的版本管理 。經過別名等配置,配合構建工具,能夠比較輕鬆地實現模塊的版本管理。
提升可維護性 。模塊化可讓每一個文件的職責單一,很是有利於代碼的維護。Sea.js 還提供了 nocache、debug 等插件,擁有在線調試等功能,能比較明顯地提高效率。
前端性能優化 。Sea.js 經過異步加載模塊,這對頁面性能很是有益。Sea.js 還提供了 combo、flush 等插件,配合服務端,能夠很好地對頁面性能進行調優。
跨環境共享模塊 。CMD 模塊定義規範與 Node.js 的模塊規範很是相近。經過 Sea.js 的 Node.js 版本,能夠很方便實現模塊的跨服務器和瀏覽器共享
簡單說: 就是 異步模塊定義(Asynchronous Module Definition),它是 依賴前置 (由於依賴必須一開始就寫好)會先 儘早地執行(依賴)模塊 , 至關於全部的require都被提早了,它的 require 分全局和局部, 一個API當多個用 。
define() 函數
14.常見兼容性問題及解決?
16.Var是什麼?說出他在JS中的重要性?
17.null和undefined的區別?
18.異步加載的方案?
defer,只支持IE ; async; 建立script,插入到DOM中,加載完畢後callBack
19.js數組去重?數組內刪除某元素?
20.
21.angularJs的優勢,如何使用angular進行單頁面的開發?
22.JavaScript的做用域?
23.document.ready和onLoad的區別?
24.離線存儲如何實現?
25.call()和apply()的做用?
相同點:兩個方法產生的做用是徹底同樣的,都用來改變當前函數調用的對象。
不一樣點:apply傳入的是一個參數數組,也就是將多個參數組合成爲一個數組傳入
call從第二個參數開始,依次傳值給調用函數的參數
26.文本中全部英文首字母大寫?
27.程序中捕獲異常的方法?
28.什麼是雙向綁定和單項數據流,他們之間有什麼區別?
雙向綁定是說 UI 模型和數據模型綁定,當界面發生變化的時候,數據模型也會跟着變化,反之亦然。 單向數據流是數據模型是惟一資源,改變界面只會觸發消息通知把用戶意圖發送給數據模型(相似 React 中的 「store」),只有數據模型才能去改變應用的狀態,這樣就保證數據永遠朝一個方向流動,可以讓代碼很是容易理解。單向數據流是肯定的,然而雙向數據綁定會有反作用讓數據流難以琢磨和跟蹤。React 是一個在單向數據流方向的新權威例子,Angular 是一個使用雙向數據流的流行框架
29.Node.js的適用場景?
高併發、聊天、實時消息推送
30.document.write和innerHTML的區別
document.write只能重繪整個頁面
innerHTML能夠重繪頁面一部分
31.JS的事件流模型
事件冒泡:事件開始由最具體的元素接受,而後逐級向上傳播
事件捕捉:事件由最不具體的節點先接受,而後逐級向下,一直到最具體的
DOM事件流:三個階段:事件捕捉,目標階段,事件冒泡
32.js延遲加載的方式有哪些?
defer和async、動態建立DOM方式(用得最多)、按需異步載入js
AJAX相關
1.ajax是什麼?最大的特色是什麼?有什麼優缺點?
Ajax 是一種異步請求數據的一種技術,對於改善用戶的體驗和程序的性能頗有幫助。
2.什麼是跨域請求?請求如何解決跨域問題?
跨域請求 基於JavaScript的安全,JavaScript同源策略要求一個網站不能調用其它網站的js對象。構成跨域的條件就是一個頁面的URL協議、域名、端口與另外一個頁面的URL只要有一個不一樣就構成了跨域請求。
解決跨域問題 jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面
3.淺談同步和異步的區別?
同步的概念
同步,是一種線性執行的方式,執行的流程不能跨越。通常用於流程性比較強的程序,咱們作的用戶登陸功能也是同步處理的,必須用戶經過用戶名和密碼驗證後才能進入系統的操做。
異步的概念
異步,是一種並行處理的方式,沒必要等待一個程序執行完,能夠執行其它的任務。在程序中異步處理的結果一般使用回調函數來處理結果。在JavaScript中實現異步的方式主要有Ajax和H5新增的Web Worker。
4.介紹一下XmlHttpRequest對象?
5.ajax應用和傳統web應用有什麼不一樣?
6.ajax請求總共有幾種callback狀態?
7.ajax和JavaScript有什麼區別?
8.ajax技術體系的組成部分?
9.動態加載如何實現?
10.ajax中get和post的區別?
11.JSON的理解
JSON(javascript Object Notation)是一種輕量級的數據交互格式;他是基於javascipt的一個子集。數據格式簡單,易於閱讀,佔用寬帶小
正則表達式相關
1.正則基本類型?
2.驗證郵箱、手機號?
3.去掉字符串兩端空格?