歡迎您光臨本站 註冊首頁

通過學習其他語言來學習JavaScript

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

回顧我的編程生涯,有三種編程語言給我學習JavaScript打上了良好的基礎(之所以這麼說,是因為JavaScript的確有一些比較難學的地方):

Scheme: 在我進入大學信息專業的第一學期,我通過經典的「計算機程序的構造和解釋」(免費在線閱讀)一書學習了Scheme語言.當初,JavaScript從Scheme中學到了閉包.最近,受Racket(一種Scheme方言)的啟發,ECMAScript 6中又增加了一種稱之為private symbol的對象類型來實現「私有性(privacy)」 .

Self: 隨後,我還粗略的學習過基於原型的面向對象語言.期間看過一篇很有見地的論文:「不使用類來組織程序」.這篇論文通過描述一種稱之為Self的語言(另一種在JavaScript發明時期影響了它的語言)講到了下面這些知識點:"基於類的語言中存在有兩種關係:誰是誰的實例(對象和類之間的關係)和誰是誰的子類(類和類之間的關係).基於原型的語言中只存在有一種關係:誰是誰的原型(對象和對象之間的關係).雖說如此,但在這兩種不同的面向對象語言中,該如何組織自己的程序,還是很類似的".

Java: 通過學習Java,有三點可以影響到你對JavaScript的學習.首先是語法,因為在發明JavaScript的時候,JavaScript之父收到的命令就是「它的語法必須看起來像Java.第二點是,它能幫助你學會面向對象的編程,雖然有時候會覺的Java的語法有點死板.「Effective Java」(亞馬遜購買鏈接)一書是一本很好的Java入門書籍.第三點,你還能知道一個好的IDE(Eclipse等)應該是什麼樣的,在這一方面,JavaScript仍然需要努力向前趕.

除了我所說的這三種語言,肯定還有一些其他的語言,能讓你把一些在這些語言中學到的原理稍加修改(或者完全一樣)就能應用到JavaScript的學習中.

譯者注:很遺憾,我沒有學過Scheme和Self,和大部分人一樣,我也費了不少勁才算搞明白JavaScript中的閉包和原型.不過我接觸過awk,Perl和Python,.這三門語言也對JavaScript產生了一定的影響.

awk的函數聲明寫法是這樣的:

  1. function add(a,b){ 
  2.     return a+b 

你看見了,和JavaScript中函數聲明的寫法一模一樣,因為function這個關鍵字就是來自awk的,證據是"Coders at Work"一書中Brendan Eich接受採訪時說過的話:

One more positive influence, and this is kind of embarrassing, was awk. I mean, I was an old Unix hacker and Perl was out, but I was still using awk for various chores. And I could』ve called these first-class functions anything, but I called them 「function」 mainly because of awk. An eight-letter keyword—it』s kind of heavy, but there it is.

再來說Perl,JavaScript中的正則表達式語法是從Perl來的.各種數組方法push,pop,shift,unshift,splice,join,reverse,sort,都是來自於Perl中的同名函數.我在SpiderMonkey源碼中搜索過"Perl",結果如下:

這些註釋幾乎都是Brendan Eich親手寫的.如果你熟悉Perl,在開始學習JavaScript的時候就不會對這些來源於Perl的方法和特性感到陌生.

那Python呢?在發明JavaScript的時候,Python才剛剛起步(1.2),目前的JavaScript貌似沒有從Python中學到些什麼,不過未來的JavaScript會,ECMAScript 6中的迭代器和生成器,yield表達式,數組(生成器)推導式,默認參數,剩餘參數,解構,模塊等等,都或多或少的學習了Python中的類似語法.如果你沒接觸過Python,學習這些東西會花費不少時間,相反,這些東西幾乎沒有什麼學習成本.

有些人說:"學習編程語言要精通一門,學的多會導致全面平庸".嗯,前半句是對的,但後半句是錯的.

原文鏈接:http://www.cnblogs.com/ziyunfei/archive/2013/02/06/2907681.html

英文原文:http://www.2ality.com/2013/02/learn-javascript.html



[火星人 ] 通過學習其他語言來學習JavaScript已經有451次圍觀

http://coctec.com/docs/program/show-post-71294.html