面試--技術面(環環相扣,最爲致命)

1.js閉包(道可道,很是道;名可名,很是名)javascript

函數內部存在一個函數,建立閉包最多見方式,就是在一個函數內部建立另外一個函數java

即一個函數能夠訪問另外一個函數的做用域算法

優勢:能夠緩存變量,下次訪問直接打開 避免全局變量的污染編程

缺點: 回調地獄,形成內存泄漏若是不是由於某些特殊任務而須要閉包,在沒有必要的狀況下,json

在其它函數中建立函數是不明智的,由於閉包對腳本性能具備負面影響,包括處理速度和內存消耗。數組

匿名函數最大的用途是建立閉包,而且還能夠構建命名空間,以減小全局變量的使用。瀏覽器

從而使用閉包模塊化代碼,減小全局變量的污染。緩存

閉包只能取得包含函數中任何變量的最後一個值,這是由於閉包所保存的是整個變量對象,安全

而不是某個特殊的變量。閉包

2.js垃圾回收機制?

GC算法Garbage Collection

引用計算法(不用就清除)、標記清除計算法(沒標記的銷燬)、複製算法(複製)

在javascript中,若是一個對象再也不被引用,那麼這個對象就會被垃圾回收機制回收;

若是兩個對象互相引用,而再也不被第3者所引用,那麼這兩個互相引用的對象也會被回收。

3.面向對象的理解?

面向對象是一種編程思想使用抽象方式抽象出顯示數據模型

在編程中增長了代碼的維護性、複用性和靈活性,

三大特徵:封裝(公有方法私有化),繼承(實現代碼的複用),多態(運行才能肯定的方法)

封裝:把描述一個對象的屬性和行爲封裝成一個類,把具體的業務邏輯功能實現封裝成一個方法,

其次封裝的意義還有效的保護屬性經過訪問修飾符私有化屬性(成員變量),公有化方法。

繼承:實現代碼的複用,全部的子類所共有的行爲和屬性抽取爲一個父類,全部的子類繼承該類可具有父類的屬性和行爲,

繼承具備單一性和傳遞性。

多態:程序中定義的引用類型變量所指向的具體類型和調用的具體方法在程序編譯階段沒法肯定,

而是在運行期才能肯定該引用類型變量指向具體哪一個對象而調用在哪一個類中聲明的方法。

4.JS繼承是什麼?

繼承:子類可使用父類的全部功能,而且對這些功能進行擴展。繼承的過程,就是從通常到特殊的過程。

缺點:使用類繼承的方法,若是父類的構造函數中有【引用類型】,就會在子類中被全部實例共用

,所以一個子類的實例若是更改了這個引用類型,就會影響到其餘子類的實例。

正式由於有了上述的缺點,纔有了構造函數繼承,構造函數繼承的核心思想就是SuperClass.call(this,id),

直接改變this的指向,使經過this建立的屬性和方法在子類中複製一份,由於是單獨複製的,

因此各個實例化的子類互不影響。可是會形成內存浪費的問題

5.get\post的區別

Get 請求能緩存,Post 不能

Post 相對 Get 安全一點點,由於Get 請求都包含在 URL 裏,且會被瀏覽器保存歷史紀錄,

Post 不會,可是在抓包的狀況下都是同樣的。

Post 能夠經過 request body來傳輸比 Get 更多的數據,Get 沒有這個技術

URL有長度限制,會影響 Get 請求,可是這個長度限制是瀏覽器規定的,不是 RFC 規定的

Post 支持更多的編碼類型且不對數據類型限制

6.ES6新特性(提供的語法糖使複雜的操做變得簡單)

①箭頭函數 -- -- this指向當前對象

②在 ES6 中類(Classes)實際上是原型繼承的語法糖(子類不但能夠繼承父類,還能夠擁有本身的方法)

③加強了對象字面量

④字符串插值``(。就是反引號)

⑤解構 Destructuring可在參數位置使用(解構對象json數據的解構)

⑥參數默認值

⑦擴展運算符...

⑧For..of迭代器的新類型,能夠替代for..in,它返回的是值而不是keys。

⑨迭代器是一個比數組更動態的類型。

⑩生成器建立迭代器,而且比迭代器更具動態性。他們沒必要以相同的方式跟蹤狀態 並不支持 done 的概念

7.js事件委託

元素響應事件(click、keydown......)的函數委託到另外一個元素;

優勢

1.提升性能:每個函數都會佔用內存空間,只需添加一個事件處理程序代理全部事件,所佔用的內存空間更少。

2.動態監聽:使用事件委託能夠自動綁定動態添加的元素,即新增的節點不須要主動添加也能夠同樣具備和其餘元素同樣的事件。

舉個例子,好比一個宿舍的同窗同時快遞到了,一種方法就是他們都傻傻地一個個去領取,還有一種方法就是把這件事情委託給宿舍長

,讓一我的出去拿好全部快遞,而後再根據收件人一一分發給每一個宿舍同窗;

在這裏,取快遞就是一個事3件,每一個同窗指的是須要響應事件的 DOM

元素,而出去統一領取快遞的宿舍長就是代理的元素,因此真正綁定事件的是這個元素,

按照收件人分發快遞的過程就是在事件執行中,須要判斷當前響應的事件應該匹配到被代理元素中的哪個或者哪幾個。

8.阻止冒泡(單詞拼讀)

w3c的方法是e.stopPropagation(),IE則是使用e.cancelBubble = true

javascript的return false只會阻止默認行爲,而是用jQuery的話則既阻止默認行爲又防止對象冒泡。

取消默認事件

w3c的方法是e.preventDefault(),IE則是使用e.returnValue = false;

9.setTimeout、Promise、Async/Await 的區別(看大家本身的理解)

相關文章
相關標籤/搜索