返回函数
函数是对象,因此可以作为返回值。也就是说,函数不一定非要返回一坨数据,函数也可以返回另外一个函数,或者可以根据输入的不同按需创造另外一个函数。
这里有一个简单的例子:一个函数完成了某种功能,可能是一次性初始化,然后做了一些对返回值的操作,而这个返回值恰巧是另一个函数:
var setup = function () {
alert(1);
return function () {
alert(2);
};
};
// 使用setup()函数
var my = setup(); // alerts 1
my(); // alerts 2
因为setup()
包裹了返回的函数,因此它创建了一个闭包,我们可以用这个闭包来存储一些私有数据,这些私有数据可以通过返回的函数进行操作,但在函数外部不能直接读取到这些私有数据。比如这个例子中提供了一个计数器,每次调用这个函数时,计数器都会加一:
var setup = function () {
var count = 0;
return function () {
return (count += 1);
};
};
// 使用
var next = setup();
next(); // 返回 1
next(); // 2
next(); // 3