felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

JavaScript 为什么说函数是一等公民? #150

Open felix-cao opened 5 years ago

felix-cao commented 5 years ago

如同封建社会的社会学关系中,人分三六九等一样,一等公民具有最高的优先权。在 JavaScript 的函数式编程范式中,我们也经常听到这样一句话 "函数是一等公民" (first-class citizens)。那我们如何去理解这句话呢?

“一等” 这个词通常用来描述值的。当函数被看作是“一等公民”, 就是函数优先(First-class Function),于是它就可以去任何值可以去的地方,按照正确的姿势,很少有限制。

"函数是一等公民" ,也就是说函数拥有值的一切特性,你可以像看待一个值一样来看待一个函数。

一、值的特性

举个例子,数字对象在 JavaScript 中是一等公民,那么数字拥有的特性,也同样被函数所拥有。

var fortyTwo = 42
var fortyOne = function() { return 41; }
var nums = { number: 42, fun: function() { return 41 }}

weirdAdd(42, function() { return 41 })


- 函数与数字一样可以被另一个函数返回

```js
function add() {
  var num1 = 42;
  return function(num2) {
    return num1 + num2
  }
}

fun = add();
fun(41);

// 83

二、函数自身的特性

所以,一等函数被看成与其他数据一样的函数: