學JS的難點

005008發表於2019-06-14

關於學習JS的難點,我整理了三個大類:

  1. 語言的進化
  2. 與瀏覽器、使用者互動相關的技巧
  3. 語言的部分特性

語言的進化

新版本會帶來新特性,這是令人興奮的事情。然而也帶來了學習的難點。主要有兩個:

  1. 除了規範裡確定的需要去學習,社群貢獻的一些優秀特性也需要學習。 比如說:已經寫入ES6規範Promise物件,在ES6前,經常成為面試題。

  2. 這是專門針對JS的,新的規範確立了,但是各廠商的瀏覽器卻沒法同步跟上。 有了Babel的支援,我們就可以忽略瀏覽器支援程度的差距,愉快的寫ES6了。 如果只會用Babel,不瞭解其原理,遇到了某些bug可能無法處理。 Babel的原理又分成兩個部分:

  • 一是Babel本身的工作原理。為了使ES6程式碼可以在ES5的環境下執行,Babel會將ES6語法轉換成ES5,對於ES5不支援的功能,還需要打上用ES5來實現的補丁。
  • 二是ES5補丁又是如何實現的呢?

因此又增加了學習的內容。

與瀏覽器、使用者互動相關的技巧

如同後端運算元據庫,前端控制瀏覽器和使用者互動也要考慮到效率和效能。同時還需要關心使用者體驗。這些內容的難點不在實現功能的本身,而是對瀏覽器工作原理和使用者互動的理解上。

  1. 當使用者開啟頁面時,如果同時載入整頁內容,可能需要很長時間,於是:
  • 使用者開啟的瞬間只會看到第一屏。所以有了分屏載入。
  • 使用者看完首屏後可能直接退出了,載入所有內容會浪費資源,所以有了滾動觸發載入。
  • 圖片通常需要更多下載時間,所以有了圖片懶載入(同滾動觸發載入)。
  • 使用者從某個頁面跳入下一個頁面的概率很大,前端可以對下一頁的內容進行預載入。
  • 刷微博的時候第一屏看到的是小的預覽圖,使用者點進去了才會載入原始尺寸的大圖。 前端關於網頁載入的所做的工作還有很多很多,後面單開一篇寫優化相關。
  1. 使用者的一些操作,例如移動滑鼠、滾動螢幕、輸入文字通常是連續的,但是互動的響應卻不一定需要連續。所以有了:
  • 防抖函式
  • 節流函式
  1. 使用者操作帶來介面的響應,我們希望介面響應的過程是流暢的,就需要用到過渡效果或者動畫

  2. 資料的改變引起介面的變化,需要頻繁的,或者批量的去操作DOM節點。於是就有了JQuery庫,後又有了MVC框架,後又有了MVVM框架,有了MVVM框架,又有了Redux來管理狀態。

語言的部分特性

  • JS是弱型別語言,而在實際應用中不可避免的需要用到判斷型別。因此JS判斷型別也會成為面試題。有了TypeScript,可以標註型別了。
  • ES6之前,JS還沒有類,不能像其它的面嚮物件語言一樣方便的使用類和繼承。因此,如何實現類的繼承也會成為面試題。

小結

短路想不出了,想到再補充~ 本篇的內容理解對入門者有點偏難,不過取法乎中,僅得其下,先了解一下後面的學習內容,對目前的理解也是有幫助的。可以從使用者互動開始慢慢理解。

相關文章