阿里雲最近在作活動,低至2折,有興趣能夠看看:
https://promotion.aliyun.com/...
爲了保證的可讀性,本文采用意譯而非直譯。javascript
本文是 前端練級攻略 第二部分,第一部分請看下面:css
在第二部分,咱們將重點學習 JavaScript 做爲一種獨立的語言,如何向界面添加交互性,JavaScript 設計和架構模式,以及如何構建網絡應用程序。html
想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等着你!前端
就像 HTML 和 CSS同樣,有大量的 JavaScript教程。然而,特別是對於一個新手來講,很難弄清楚使用什麼樣的教程以及以什麼樣的順序來學習它們。本系列的主要目標是爲你提供一個路線圖,幫助你導航學習成爲前端開發者。vue
JavaScript 是一種跨平臺的編程語言,如今幾乎能夠用於任何事情。html5
在學習如何將JavaScript應用到web以前,首先要了解該語言自己。首先,閱讀 Mozilla Developer Network的語言基礎速成課程。本教程將教你基本的語言結構,如變量、條件和函數。java
而後,閱讀 MDN 的 JavaScript 指南中的如下部分:node
不要太擔憂記住特定的語法,你能夠隨時查一下文檔。相反,應該專一於理解重要的概念,好比變量實例化、循環和函數。若是知識密度難度太大,也沒關,先過一篇,你把這些概念付諸實踐,當你回過頭在來看,可能會理解起來會更加清晰。react
基於文檔的學習可能會過於單調,能夠看看 Codecademy 的 JavaScript課程,這課程是理論與實踐相結合的,相對會有樂趣一。 此外,若是你有時間,請參閱上面列出的每一個概念,閱讀 Eloquent JavaScript中的相應章節以增強你的學習。 Eloquent JavaScript 是一本很棒的免費在線書籍,每一個有抱負的前端開發人員都應該閱讀。jquery
如今你已經基本瞭解了 JavaScript 的語法,下一步就是將它應用到 Web上。 要了解 JavaScript如 何與網站交互,首先你必須瞭解 文檔對象模型(DOM)。
DOM 是 HTML 文檔的一種表示結構。它是一個樹形結構,由對應於 HTML 節點的 JavaScript 對象組成。要進一步瞭解DOM,請閱讀 CSSTricks 的 《什麼是DOM》。它提供了對 DOM 的簡單而直接的解釋。
JavaScript 與 DOM 交互以更改和更新它。下面是一個例子,咱們選擇一個 HTML 元素並更改它的內容
var container = document.getElementById(「container」); container.innerHTML = 'New Content!';
別擔憂,那只是一個簡單的例子。使用 JavaScript DOM 操做,你能夠作更多的事情。要了解有關如何使用 JavaScript 與 DO M交互的更多信息,請閱讀 MDN 的「文檔對象模型」一節中的如下指南。
再次強調一下,重點是要先理解概念而不是語法,但願可以回答如下問題:
有關常見的 JavaScript DOM 交互的列表,請查看 PlainJS 的 JavaScript 函數和助手。該網站提供了一些例子,說明如何在 HTML 元素上設置樣式和附加鍵盤事件監聽器。若是你想深刻挖掘,你能夠隨時閱讀 Eloquent 講的 JavaScript 中關於DOM的部分。
要調試瀏覽器中的JavaScript,咱們使用瀏覽器內置的開發人員工具。 大多數瀏覽器都提供了 inspector
面板,可讓你查看網頁的來源。 你能夠在執行時跟蹤 JavaScript,將調試語句打印到控制檯,以及查看網絡請求和資源等內容。
裏有一個關於使用 Chrome 開發工具的教程。若是你使用的 Firefox,能夠查看本教程。
在這一點上,關於JavaScript還有不少東西須要學習。然而,最後一節包含了許多新信息。我想咱們該休息一下,作幾個實踐了。它們有助於鞏固你剛剛學到的一些概念。
對於實踐1,轉到 AirBnB,打開瀏覽器的頁面檢查器,而後單擊控制檯選項卡。在這裏,你能夠在頁面上執行JavaScript。咱們要作的是經過操縱頁面上的一些元素來得到一些樂趣。看看你是否能夠完成如下全部的 DOM 操做。
* 選擇一個特定的區域標籤,並向下移動250像素
* 選擇任何組件,如面板,並調整其透明度
alert (「Hello world」)
而後執行它click
事件,並在每次事件被觸發時運行 doSomething
若是您遇到困難,請參考 JavaScript 函數和幫助程序指南。這些任務大部分都是基於它。如下是如何完成第一個要點的示例:
var header = document.querySelector(‘.text-branding’) header.innerText = ‘Boop'
這個實踐的主要目的是學習一些關於 JavaScript 和 DOM 操做的知識,並看到它們的實際應用。
使用 CodePen,編寫一個使用DOM操做並須要一些編程邏輯來運行的基礎JavaScript 實踐。這個實踐的重點是把你在《前端練級攻略》第 1 部分中學到的一些東西和 JavaScript結合起來。這裏有幾個能夠做爲啓發的參考例子。
如今你已經瞭解了一些 JavaScript並進行了一些實踐,咱們將繼續學習一些更高級的概念。下面的概念並不直接相關。我將它們分組在本節中,由於它們對於理解如何構建更復雜的前端系統是必要的。一旦你進入框架部分,你將更好地理解並使用它們。
當你使用JavaScript進行更多工做時,你將遇到一些更高級別的概念。 如下其中一些概念的列表。 若是有時間,仔細閱讀每個要點 此外,若是你想補充學習其它內容,Eloquent JavaScript 涵蓋了大部份內容。
JavaScript如何與DOM交互有兩種方法:命令式和聲明式
。一方面,聲明式編程關注所發生的事情。另外一方面,命令式編程關注的是什麼以及如何實現。
var hero = document.querySelector('.hero') hero.addEventListener(‘click’, function() { var newChild = document.createElement(‘p’) newChild.appendChild(document.createTextNode(‘Hello world!’)) newChild.setAttribute(‘class’, ‘text’) newChild.setAttribute(‘data-info’, ‘header’) hero.appendChild(newChild) }) }
這是命令式編程的一個例子,咱們手動查詢一個元素並將 UI 狀態存儲在 DOM 中。換句話說,專一於如何實現某件事。這段代碼最大的問題是它很脆弱。若是處理代碼的人將 HTML中 的類名從 hero
更改成villain
,事件偵聽器將再也不觸發,由於 DOM 中沒有 hero
類。
聲明式編程解決了這個問題。你沒必要選擇元素,而是將其留給您正在使用的框架或庫。這讓你專一於作什麼而不是如何作。要了解更多信息,請查看 JavaScript的狀態——從命令式轉換到聲明式,以及 Web開發:聲明式vs.命令式。
在這些文章和教程中,你可能已經屢次看到 Ajax 這個術語。Ajax 是一種容許 web 頁面使用 JavaScript 與服務器交互的技術
例如,當你在網站上提交表單時,它收集你的輸入併發出 HTTP 請求,將數據發送到服務器。當你在Twitter 上發佈一條 tweet 時,你的 witter 客戶機向 Twitter 的服務器 API 發出 HTTP 請求,並使用服務器響應更新頁面。
有關 Ajax 的閱讀,請查看什麼是Ajax。若是你仍然沒有徹底理解 AJAX 的概念,請看看 Explain it like i’m 5, what is Ajax。若是這些還不夠,你還能夠閱讀關於 HTTP 的JavaScript 章節。
今天,HTTP 請求的瀏覽器標準是 Fetch。 你能夠在 Dan Walsh 的這篇文章中閱讀有關 Fetch 的更多信息。 它介紹了Fetch 的工做原理以及如何使用它。 你還能夠在此處找到帶文檔的 Fetch polyfill。
到目前爲止,你一直在使用 JavaScript 進行 DOM 操做。事實上,有不少 DOM 操做庫提供api 來簡化你編寫的代碼。
最流行的 DOM 操做庫之一是 jQuery。請記住,jQuery 是一個命令式庫。它是在前端系統像今天這樣複雜以前編寫的。現在,管理複雜 UI 是聲明性框架和庫,如 Vue、Angular 和 React。可是,我仍然建議你學習jQuery,由於在你的前端職業生涯中極可能會遇到它。
要學習j Query 的基礎知識,請查看 jQuery學習中心。它一步一步地經過一些重要的概念,好比動畫和事件處理。若是你想要更多的動手教程,能夠看看 Codecademy 的 jQuery課程。
理解 JavaScript 的另外一個重要概念是 ECMAScrip t以及它與 JavaScript 的關係。今天,你日常看到是兩種主要的 JavaScript 風格:ES5 和 ES6。ES5 和 ES6 是 JavaScript 使用的 ECMAScript 標準。你能夠將它們看做JavaScript的版本。ES5 的最終草案是在2009
年完成的,到目前爲止你一直在使用它。
ES6,也稱爲 ES2015,是一個新標準,它爲JavaScript帶來了新的語言結構,好比常量、類和模板字符串。值得注意的是,ES6 帶來了新的語言特性,但仍然使用 ES5 從語義上定義它們。例如,ES6 中的類只是JavaScript原型繼承的語法糖。
瞭解 ES5和 ES6 是很是重要的,由於今天你會看到使用這兩種方法的應用程序。 ES5, ES6, ES2016, ES.Next:下一步:JavaScript版本控制是怎麼回事 這是一篇很好介紹了 ES6 相關的知識,
Dan Wahlin的 ES6入門-下一版本的JavaScript正在發生什麼。以後,你能夠在 ES6 特性中看到從ES5 到 ES6 的完整變化列表。若是你想要更多,請查看這個包含 ES6 特性的Github存儲庫。
若是你已經到了這一步,恭喜你本身。你已經瞭解了不少JavaScript。讓咱們把你學到的一些東西付諸實踐。
練習3 將你所學的 HTML 和 CSS 知識與 JavaScript 入門課程結合起來。在這個實驗中,你將建立本身設計的時鐘,並使其與 JavaScript 交互。在開始以前,我建議閱讀 解耦HTML、CSS和JavaScript的教程,以瞭解在混合使用 JavaScript 時的基本 CSS 類命名約定。我還在 CodePen上準備了一份筆的清單,你能夠做爲此次練習的參考。有關更多示例,請在 CodePen 上搜索clock。
你能夠用兩種方法作這個實驗。你能夠先用 HTML 和 CSS 設計和建立佈局,而後用 JavaScript 增長交互性。或者你能夠先編寫J avaScript 邏輯,而後再進入佈局。此外,你可使用jQuery,但也能夠隨意使用純 JavaScript。
掌握了JavaScript的基礎知識以後,是時候學習 JavaScript 框架了。框架是 JavaScript 庫,能夠幫助你構造和組織代碼。JavaScript 框架爲開發人員提供了複雜前端問題的可重複解決方案,好比狀態管理、路由和性能優化。它們一般用於構建web應用程序。
我不會講解每一個JavaScript框架,這裏有幾個框架的快速預覽:Angular、React + Flux、Ember、Aurelia、Vue和Meteor。你沒必要學習每一個框架。挑一個,好好學習。不要追逐框架,相反,要理解框架所基於的底層編程哲學和原則。
在查看框架以前,理解框架傾向於使用的一些架構模式是很重要的:MVC(Model–view–controller)、MVVM(Model–view–viewmodel)v和vMVP(Model–view–presenter)。這些模式被設計成在應用層之間建立清晰的關注點分離。
關注點分離是一種設計原則,主要思想是將應用程序拆分爲不一樣的域特定層。 例如,你可使用JavaScript 對象(一般稱爲模型)來存儲狀態,而不是讓 HTML 保持應用程序狀態。
要了解更多關於這些模式的信息,請先閱讀 Chrome Developers 的 MVC。以後,閱讀理解 MVC 和MVP(面向JavaScript和主幹開發人員)。在那篇文章中,不要擔憂學不會,看不懂,只需理解 MVC和 MVP 的部分概念便可。
Addy Osman 還寫了關於 MVVM 的 理解 MVVM 的JavaScript開發人員指南。要了解 MVC 的起源及其產生的緣由,請閱讀 Martin Fowler 關於GUI體系結構的文章。最後,閱讀 JavaScript MV* Patterns一節,學習 JavaScript 設計模式。學習JavaScript設計模式是一本很棒的免費在線書籍。
JavaScript 框架不會從新發明輪子。它們中的大多數依賴於設計模式。你能夠將設計模式視爲解決軟件開發中常見問題的通用模板。
雖然理解 JavaScript 設計模式並非學習框架的先決條件,但我建議在有時間的時候能夠看看如下幾種設計模式。
理解並可以實現其中的一些設計模式不只會使你成爲更好的工程師,並且還會幫助你理解一些框架的底層功能。
AngularJS 是一個JavaScript MVC 框架,有時也是 MVVM 框架。它由谷歌維護,並在2010年首次發佈時席捲了 JavaScript 社區。
Angular 是一個聲明性框架。幫助我理解如何從命令式編程過渡到聲明式JavaScript編程的最有幫助的文章之一是在StackOverflow上的 AngularJS 與 jQuery有何不一樣。
若是你想了解更多關於 Angular 的知識,請查看 Angular文檔。他們還提供了一個名爲 Angular Cat 的教程,可讓你立刻投入到編程中去。Tim Jacobi 在 Github知識庫中提供了一個更完整的 Angular 學習指南。此外,看看約翰·帕帕寫的這本權威的最佳實踐風格指南。
Angular 解決了開發人員在構建複雜的前端系統時所面臨的許多問題。另外一個流行的工具是 React,它是一個用於構建用戶界面的庫。你能夠把它想象成 MVC 中的 V。由於 React 只是一個庫,因此它一般使用一個稱爲 Flux 的架構。
Facebook設計React和Flux是爲了解決MVC的一些缺點及其在規模上的問題。看看他們著名的演示 黑客方式:從新思考Facebook的Web應用程序開發。它超過了Flux,它起源於此。
要開始學習 React 和 Flux,首先要學習 React。一個好的入門讀物是 React文檔。在那以後,看看 React.js Introduction For People Who Know Just Enough jQuery To Get By ,幫助你 從jQuery 的思惟模式過渡過來。
一旦你對 React 有了基本的瞭解,開始學習 Flux。一個好的起點是官方的Flux文檔。在那以後,看看 Awesome React,這是一個精選的連接列表,能夠幫助你在學習上更進一步。
如今你已經掌握了 JavaScript 框架和架構模式的一些基本知識,如今是時候將它付諸實踐了。 在這兩個練習中,重點是應用你學到的架構概念。 特別是,保持您的代碼 DRY,明確分離關注點,並遵照單一責任原則。
練習 5 是使用不依賴框架的 JavaScript 分解和重構 Todo MVC 應用程序。這個練習的目的是向你展現 MVC 如何在不混合框架特定語法的狀況下工做。
首先,在TodoMVC上查看最終結果。第一步是在本地建立一個新項目,並首先創建 MVC 的三個組件。因爲這是一個複雜的實驗,請參考 Github 存儲庫中的完整源代碼。若是你不能徹底複製這個項目或者沒有時間,也不要緊。下載 repo
代碼並嘗試使用不一樣的 MVC 組件,直到你理解它們之間的關係。
練習 5 是應用 MVC 的一個很好的練習,理解 MVC 是學習 JavaScript 框架的重要一步。 練習 5 是按照 Scotch.io的教程來構建一個帶有 Angular 的 Etsy 克隆。
使用Angular構建一個Etsy克隆,Stamplay 將教你如何使用 Angular 構建一個 web 應用程序,如何使用 api 構建接口,以及如何構造大型項目。完成本教程後,可以回答如下問題。
若是你想嘗試構建更多 Angular web 應用程序,能夠嘗試使用 AngularJS & Firebase構建一個實時狀態更新應用程序。
就像前端的其餘部分同樣,JavaScript的發展很快,保持持續關注是很重要的。
下面是一個網站、博客和論壇的列表,這些網站、博客和論壇閱讀起來既有趣又信息豐富。
一如既往,最好的學習方法是以身做則。
JavaScript樣式指南是一組編碼規範,旨在幫助保持代碼的可讀性和可維護性。
我沒法強調閱讀好的代碼是多麼有幫助,瞭解如何在獲取新內容時搜索Github的相關存儲庫。
在本指南結束時,您應該已經緊緊掌握了 JavaScript 的基本原理以及如何將它們應用到網絡上。請記住,本指南爲你提供了一個整體路線圖。若是你精通前端,花時間在項目上應用這些概念是很重要的。你作的項目越多,對它們越有熱情,你會學到更多。
原文:https://medium.freecodecamp.o...
你的點贊是我持續分享好東西的動力,歡迎點贊!
乾貨系列文章彙總以下,以爲不錯點個Star,歡迎 加羣 互相學習。
https://github.com/qq44924588...
我是小智,公衆號「大遷世界」做者,對前端技術保持學習愛好者。我會常常分享本身所學所看的乾貨,在進階的路上,共勉!
關注公衆號,後臺回覆福利,便可看到福利,你懂的。