JavaScript是一门被误会最深的语言,这话一点不假,我们看下它的发展历史.

1995年,Netscape要推向市场,需要一门脚本语言来配套它.是使用一门已有的语言,还是发明一门新的语言,这也不是我能决定的.来自高层管理人员的强制命令是这门语言必须"看起来像Java".这样也就排除了已有的语言Perl,Python,和Tcl,以及Scheme.

当时Netscape(网景)公司招了个程序员来干这件事情.他就是JavaScript之父Brendan Eich,Brendan Eich是个很聪明的小伙,很喜欢函数式编程,对Scheme相当在行.

事情是这样的,当时如果这事让Brendan Eich来干,那么现在所谓的JavaScript就是Scheme了,IT界将进步至少10年,脚本代码那就是纯纯的函数式了,还可以用开发工具,用编译器来做.当然脚本写出来可能是这样子的.

(begin
  (display"Hello, World!")
  (newline))

好多括号是不是.因为当时JAVA很流行,Brendan Eich的某位不懂技术的上司要求把JavaScript开发成象Java,但是Brendan Eich还是喜欢函数式编程.所以就成了这样.

document.write("Hello World!");

标准的命令式,没什么特殊的,函数式编程被埋在了传统命令式的外壳之下.Brendan Eich还表示,如果他在十天内做不出JS,会产生另外一种更糟的语言 

而这个给了Brendan Eich十天时间,并做得象Java样的上司就是Rick Schell.一个糟糕的领导,毁掉的不是一个下属,而是整个世界,相信写过JS代码人的都有这种痛苦的感受.

好在Brendan Eich毕竟是大牛,10天时间,给JS带来了一些很烂的东西,但基本上精华的东西,还是都放上去了,就是Scheme所拥有的,这让JS成为一门完整的函数式语言成为可能.

这里有两个本人认为很关键的人物,第一个是:

Douglas Crockford是一名来自Yahoo!的资深JavaScript架构师,以创造和维护JSON (JavaScriptObject Notation) 格式而为大家所熟知

他根据JS的灵感创造了JSON,JS+JSON,好用多了吧,还给出了JS精粹,告诉我们怎样用好JS.对JS进行裁减,只用一个最好的部分集合.真是贡献.

另一个就是,Jeremy Ashkenas, 它给出了Underscore.js这样一个JS的最底层函数式编程基础库,通过JS的基本功能,包装了大量的函数式特性.补完了JS的函数式编程支持.当然他的贡献不仅仅这点,他甚至还继续创造了CoffeeScript

CoffeeScript 是一套 JavaScript 的转译语言。受到 Ruby、Python 与 Haskell 等语言的启发[1],CoffeeScript 增强了 JavaScript 的简洁性与可读性。此外,CoffeeScript 也新增了更复杂的功能,例如列表内涵(List comprehension)、模式匹配(Pattern matching)等。一般来说,CoffeeScript 可以在不影响执行效能的情况下,缩短约三分之一的程式码长度[3]。自从2011年6月以来,CoffeeScript 已经是 GitHub 上最受瞩目的专案之一。

这下JS化身为CS, CoffeeScript终于补完了函数式编程,语法更简洁,而且是编译式的.这就让写JS的错误变的更少了,编译出来的代码就是JS.

当然,还有几个不得不提的东西,就是在Underscore.js的基础上,有人又开发出了JQuery,BackBone这样的JS库.让JS可以做更复杂的应用了.

经过补完后的的JS,就象是被打磨后的钻石,终于发出了它的光芒,已经值得用它来些一些应用程序了.当然,事情远不止于此.

JS语言层面补完了,也有了Jquery这样的库,但这点东西,做应用还是远不够的.

最近出了个叫Node.JS的东西,它可以用JS写后台,还有个Angular等类似的东西,可以用来写前端的框架.

至此,JS语言的后端,前端框架和支撑平台都得到了补完,可以真正做应用了.至少开发所需要的东西足够.

但是.

让JavaScript回归函数式编程的本质的更多相关文章

  1. 翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  2. 翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  3. 翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  4. 翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 引言&前言

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.brucec ...

  5. 翻译连载 | 第 11 章:融会贯通 -《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  6. 翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  7. 翻译连载 | 附录 A:Transducing(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  8. 翻译连载 | 附录 B: 谦虚的 Monad-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  9. 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

随机推荐

  1. Spring(5)—— 注解

    注解Annotation,是一种类似注释的机制,在代码中添加注解可以在之后某时间使用这些信息.跟注释不同的是,注释是给我们看到,java虚拟机不会编译,注解也是不编译的,但是我们可以通过反射机制来读取 ...

  2. jQuery构造函数分析

    在我的上一篇文章里面 阐述了jQuery的大致框架,知道了所有代码都是写在了一个自调用匿名函数里面,并且传入了window对象,源码是这样的: (function( window, undefined ...

  3. jquery中 $(document).ready()和window.onload的区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2.编写个数不同 ...

  4. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q131-Q134)

    Question  131 You are designing multiple SharePoint 2010 features. You have the following requiremen ...

  5. 详解tintColor属性

    tintColor属性是iOS7之后新加的一个属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构.它主要是改变控件的颜色,以获取一些有意思的视觉效果. ti ...

  6. JDBC快速入门

    /** * JDBC快速入门: * 1.导入jar包 数据库驱动 * 2.注册驱动 * 3.获取数据库连接对象 Connection * 4.定义sql语句 * 5.获取发送执行sql语句的对象 St ...

  7. RedHat Linux RHEL6配置本地YUM源

    YUM是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog ...

  8. Oracle索引梳理系列(六)- Oracle索引种类之函数索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  9. 我心中的MySQL DBA

    原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...

  10. JavaScript判断各浏览器CSS前缀的两种方式

    不管浏览器更新的多快,号称多么支持标准.厂商不同,他们之间还是有很多差异.我们需要区分出这些差异,针对不同的浏览器做不同的处理. 比如 CSS 前缀,IE 的是 "-ms-",旧版 ...