1、函数式的Javascript:
Javascript作为一门函数式语言,具有以下特点:
① 函数作为顶级的元素,是不依赖于其他对象而单独存在的。 ② 函数可以保持自己内部的数据,这一特性称之为闭包。
下面是使用闭包实现的一个函数体现了数据的保持:
var func1 = function(){
var x = 0;
return function(){
return x++;
}
}
var a = func1();
alert(a()); //0
alert(a()); //1
var b = func1();
alert(b()); //0
alert(b()); //1
变量a通过闭包引用了func1的一个内部变量,每次调用a()就会改变这个内部变量。当调用a时,函数func1已经返回,但是内部变量x还保持着,而变量b跟a类似,但是他们属于不同的闭包,所以持有不同的数据。
这样就相当于面向对象中的不同实例持有不同的属性,互不干涉。
2、匿名函数:
在C/Java中函数和方法必须有名字才能被调用,而在Javascript中,函数可以没有名字:
//普通函数
function func1(){}
//匿名函数
var func2 = function(){}
这两个语句都表示为全局对象添加一个属性,属性func2的值为一个函数对象,这个函数为匿名函数。
3、高阶函数:
所谓高阶函数,就是以一个或者多个函数作为参数的函数。C中的函数指针,Java中的匿名类都是高阶函数的实现。
4、闭包与柯里化:
柯里化:柯里化就是预先将函数的某些参数传入,得到一个简单的函数,但是预先传入的参数被保存在比保重,因此会有一些奇特的特性:
var compute = function(num){
return function(x){
return num + x;
}
}
var inc = compute(2); //2传到闭包中
alert(inc(100)); //100作为compute的参数传递