JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

函数式的Javascript

要说 JavaScript 和其他较为常用的语言最大的不同是什么,那无疑就是 JavaScript是函数式的语言,函数式语言的特点如下:
函数为第一等的元素,即人们常说的一等公民。就是说,在函数式编程中,函数是不依赖于其他对象而独立存在的(对比与 Java,函数必须依赖对象,方法是对象的方法)。

函数可以保持自己内部的数据,函数的运算对外部无副作用(修改了外部的全局变量的状态等),关于函数可以保持自己内部的数据这一特性,称之为闭包。我们可以来看一个简单的例子:
var outter = function(){
    var x = 0;
    return function(){
        return x++;
    }
}
var a = outter();
print(a());
print(a());
var b = outter();
print(b());
print(b());

运行结果为:
0
1
0
1

变量 a 通过闭包引用 outter 的一个内部变量,每次调用 a()就会改变此内部变量,应该注意的是,当调用 a 时,函数 outter 已经返回了,但是内部变量 x 的值仍然被保持。而变量 b 也引用了 outter,但是是一个不同的闭包,所以 b 开始引用的 x 值不会随着 a()被调用而改变,两者有不同的实例,这就相当于面向对象中的不同实例拥有不同的私有属性,互不干涉。

由于 JavaScript 支持函数式编程,我们随后会发现 JavaScript 许多优美而强大的能力,这些能力得力于以下主题:匿名函数,高阶函数,闭包及柯里化等。熟悉命令式语言的开发人员可能对此感到陌生,但是使用 lisp, scheme 等函数式语言的开发人员则觉得非常亲切。