-
1 # UOYC
-
2 # 粽子Han
學JavaScript大概有十來年了,說說我當時的一點學習體驗吧。
第一次接觸JavaScript是玩qq空間程式碼那會,現在的00後90後可能都不知道有這段歷史了,那時可謂盛況空前,用的基本上都是類似<img arc=“javascript:alert(1)” />這種偽協議的方式把自己的qq空間打扮的酷酷的。
透過玩qq空間程式碼這玩意,結識了一位好友,當年百度JavaScript貼吧的第一位吧主。透過他,我第一次知道了有JavaScript這玩意,於是跟他要了一本JavaScript電子手冊開始啃,大概前前後後學了大半年,看的時候感覺都懂了,用的時候一個程式碼都敲不出來,然後跟我這位老友吐槽了下js咋這麼難學,又讓他幫我過了一遍基礎知識,聽的時候都能聽懂,但還是無法脫離不會用的魔咒……
就在我差點要放棄的時候,一本名叫《Javascrip DOM程式設計藝術》的書拯救了我
沒錯就是這本,現在可能已經更新了好幾代,這版的書已經買不到了,我當時就是讀了這本書入門的,它的特點就是不講太基礎的東西,而是透過一個個小案例教你一步步把JavaScript用起來,我是花了個把月時間,完全按照書上的章節把每個例子都實現一遍,然後就有種頓悟的感覺:原來JavaScript是這樣用的!
透過這本書入門以後,就相當於心中搭建了JavaScript的基礎框架搭,再碰到一些不會的問題不再那麼茫然,透過查手冊不斷完全這個框架,JavaScript技術就穩步提升了。
也就是說,大概花了一年多時間,我的JavaScript才算真正的入門,對,只是入門而已。實在是資質太差,汗顏
後來qq空間程式碼被騰訊封殺的很厲害,我們逐漸就不玩了,但沒多久,qq農場火了起來,我跟我這位大牛朋友也沒有免俗,加入了偷菜大軍。前期發現怎麼也偷不過別人,於是就在我朋友的帶領下用JavaScript寫了個qq農場偷菜的輔助工具,後來跟女神比偷菜再也沒有輸過,JavaScript的技術也在這些小專案的歷練中上了一個新的臺階,這裡對騰訊表示下非常感謝
其實講了這麼多,總結一下就是,學程式設計要去實戰,邊學邊做小專案,透過小專案不斷強化基礎知識點,在我看來這是最快的學習方法!
希望對您有所啟發!
回覆列表
也許你聽過有人說學會了一門程式語言以後再學其他程式語言就很快上手了,其實這句話是不對的。在已經有程式語言佔領了市場以後,又有新的程式語言被創造出來並且對外發布投入使用,多半是因為現有的程式語言在解決某方面問題時不盡人意;如果這個新的程式語言還變得很流行的話,那一定是因為這個程式語言的某些特點存在很大的優勢。
javascript語言能成為現代網際網路應用開發使用範圍最廣的程式語言其自身特點也是十分顯著的。
一 學習任何一門程式語言首先要看的就應該是這個程式語言的變數型別。
1. JS是動態型別的程式語言。
js和python、php這類的程式語言一樣,宣告變數時無需指明變數型別,比如 var a,就是一個變數宣告,既可給a賦值一個數值 a=3 也可以讓a指向一個字串 如 a=“hello”。
與動態型別相對的就是靜態型別了,比如java 、c、 c++,靜態型別的程式語言宣告變數時需要說明變數型別,且一旦確定變數型別後,變數就只能存放這種型別的值,常見的靜態型別宣告時這樣的 int a又或者 var a:Integer 。
2.JS是強型別語言
關於這一點,很多人可能都存在誤解,不過這也不奇怪,因為很多學校早期使用的計算機c語言教材中就出現了錯誤,導致很多人都弄錯了。
與強型別對應的是弱型別,java是強型別,但是C語言是弱型別,js和python是強型別,php是弱型別。區分是不是強型別關鍵是看變數所指向的儲存單元中儲存資料時是否區分資料型別而不是看宣告變數時有沒有指明型別。
以c語言為例,比如變數int a所在記憶體中儲存的資料是 b’00000000 00000000 00000000 01000001’ ,很顯然這只是一個二進位制的值,儘管它的宣告是int型別,但它在程式中記錄的不一定就是一個數值,它表示什麼含義我們只能透過閱讀程式才能確定,如果控制檯輸出時使用 c%,那麼輸出a的到的事字元 ‘A’,如是使用d%,輸出的就是數值65,如果用於訊號輸出,它表示的就是輸出電位。
與c、php語言不同,js是強型別語言,儘管作為動態型別的js宣告變數時不需要指定型別,但是一旦賦值後,js在儲存變數的時候除了記錄值本身,還會標註出變數值的型別,比如在js中a=3,a=3.0 a=“3.0”就是完全不同的3個值,強型別在計算的時候需要做型別轉換操作,雖然有些變數轉換過程是隱式轉換(編譯器完成)。
二 程式語言的程式設計模式
在本文開始時,筆者提到過很多人認為學會一門語言以後再看其他語言就能很快上手的誤解,存在這個誤解大概是因為普通人在學第一個程式語言時會遇到的一個巨大障礙,那就是程式邏輯。人類要想讓計算機幫助人類解決問題就必須學會像計算機一樣思考,順序、迴圈、分支就是程式邏輯的基礎,大學的c語言考試基本上也就是考核程式邏輯為主。
然而程式邏輯只是人類思考問題的一個角度,一種思維框架而已,程式邏輯是高度數學化的,即便不是工程師人類也需要這種邏輯思維,在美國,小學生就開始學習程式設計了,這不是為了讓小孩子長大以後都去當工程師,而是教會他們一種思維方式,就像經濟學家、律師也都有各自的思維框架一樣。
因此能用一門程式語言寫順序、迴圈、分支並不能算上手一門程式語言,真要說上手,至少需要掌握這門程式語言所推崇的設計模式。
JS是函式式的,它支援物件但非面向物件。
面向物件是設計模式嗎?對沒錯,面向物件就是在解決複雜的應用開發中透過抽象業務而誕生的一種設計模式,早期的C語言本身是過程話的程式語言,但是這不妨礙C語言的使用者利用C語言實現面向物件,而面向物件的使用如此的頻繁,於是C++誕生了,並且把面向物件直接整合到餓了語言特性裡面,後面的java又對C++做出了最佳化。
JS語言本身並沒有實現面向物件,而是透過原型機成鏈對物件繼承做出了支援。即然面向物件只是一種設計模式,js當然也可以自己動手實現面向物件程式設計。
不過嚴格意義來講,如果你真的希望用好js,那麼類似java這樣的完全面向物件程式設計並非最適合js的設計模式,因為js語言本身被設計為函式式的,函數語言程式設計對人更友好。如果想要寫出真正漂亮的js程式碼,建議讀一讀js函數語言程式設計指南。(第3張圖片中的這本書)
三 容器型別
掌握了變數的型別與使用,也知道了程式設計正規化與適合的設計模式,那麼接下來就要看容器型別了,現代化的程式語言多數都內建了大量好用的容器型別,比如陣列,字典 ,連結串列等。
js中最常用的容器型別是由鍵值對構成的物件和可變陣列,配合json型別表示方法使用起來十分靈活和方便,如果是在某些專業領域使用容器,那麼js還提供了更為高效的容器型別,比如float32型別的列表,在最新的js官方文件中可以看到完整的容器型別和具體用法。
四 應用領域
js語言和語法特點了解清楚以後,那麼我們就應該看看這門語言擅長的領域了。
2. 圖形影象程式設計,網頁遊戲、微信小遊戲(小程式)、資料視覺化等領域,js的應用也十分廣泛,h5的canvasAPi,以及SVG程式設計都需要使用js,隨著移動裝置的晶片越來越強大,網頁3維圖形渲染在效能上也已經不是問題,因此基於WEBGL的應用也越來越廣泛,由於圖形影象程式設計對人數學功底要求較高,不建議新人從中這塊著手,如果感興趣的可以關注我,單獨私信。
3.nodeJS,由於nodeJS社群的興起,js在伺服器端的應用開發應用也越來越多,尤其是在遊戲領域,nodejs除了在伺服器端表現出色外,對於js專案的構建和自動化也起到了很大的促進作用,因此,各種基於js的前端開發技術應運而生,比如大名鼎鼎的react 與react native,這方面也推薦兩本書給大家,一個是NodeJS實戰,另一本是react實戰。