[译]通过学习其他语言来学习JavaScript (original) (raw)

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


回顾我的编程生涯,有三种编程语言给我学习JavaScript打上了良好的基础(之所以这么说,是因为JavaScript的确有一些比较难学的地方):

除了我所说的这三种语言,肯定还有一些其他的语言,能让你把一些在这些语言中学到的原理稍加修改(或者完全一样)就能应用到JavaScript的学习中.

译者注:很遗憾,我没有学过Scheme和Self,和大部分人一样,我也费了不少劲才算搞明白JavaScript中的闭包和原型.不过我接触过awk,Perl和Python,.这三门语言也对JavaScript产生了一定的影响.

awk的函数声明写法是这样的:

function add(a,b){ 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中学到些什么(修正(2013.2.25):这里说错了,多少还是有一点的,看下面的追记),不过未来的JavaScript会,ECMAScript 6中的迭代器和生成器,yield表达式,数组(生成器)推导式,默认参数,剩余参数,解构,模块等等,都或多或少的学习了Python中的类似语法.如果你没接触过Python,学习这些东西会花费不少时间,相反,这些东西几乎没有什么学习成本.

有些人说:"学习编程语言要精通一门,学的多会导致全面平庸".嗯,前半句是对的,但后半句是错的.

引用文章

  1. JavaScript: how it all began
  2. Private data for objects in JavaScript

追记(2013.2.25):原文作者看了我翻译的这篇文章之后,又写了一篇文章介绍Perl和Python对JavaScript的影响,http://www.2ality.com/2013/02/javascript-influences.html,不需要翻译就能看明白.