返回函数

函数是对象,因此可以作为返回值。也就是说,函数不一定非要返回一坨数据,函数也可以返回另外一个函数,或者可以根据输入的不同按需创造另外一个函数。

这里有一个简单的例子:一个函数完成了某种功能,可能是一次性初始化,然后做了一些对返回值的操作,而这个返回值恰巧是另一个函数:

  1. var setup = function () {
  2. alert(1);
  3. return function () {
  4. alert(2);
  5. };
  6. };
  7. // 使用setup()函数
  8. var my = setup(); // alerts 1
  9. my(); // alerts 2

因为setup()包裹了返回的函数,因此它创建了一个闭包,我们可以用这个闭包来存储一些私有数据,这些私有数据可以通过返回的函数进行操作,但在函数外部不能直接读取到这些私有数据。比如这个例子中提供了一个计数器,每次调用这个函数时,计数器都会加一:

  1. var setup = function () {
  2. var count = 0;
  3. return function () {
  4. return (count += 1);
  5. };
  6. };
  7. // 使用
  8. var next = setup();
  9. next(); // 返回 1
  10. next(); // 2
  11. next(); // 3