Open felix-cao opened 5 years ago
如同封建社会的社会学关系中,人分三六九等一样,一等公民具有最高的优先权。在 JavaScript 的函数式编程范式中,我们也经常听到这样一句话 "函数是一等公民" (first-class citizens)。那我们如何去理解这句话呢?
JavaScript
“一等” 这个词通常用来描述值的。当函数被看作是“一等公民”, 就是函数优先(First-class Function),于是它就可以去任何值可以去的地方,按照正确的姿势,很少有限制。
"函数是一等公民" ,也就是说函数拥有值的一切特性,你可以像看待一个值一样来看待一个函数。
举个例子,数字对象在 JavaScript 中是一等公民,那么数字拥有的特性,也同样被函数所拥有。
var fortyTwo = 42 var fortyOne = function() { return 41; }
函数与数字一样可以存储为数组的一个元素
var nums = [42, function() { return 41 }]
函数与数字一样可以作为对象的成员变量
var nums = { number: 42, fun: function() { return 41 }}
42 + (fuction() { return 41 })(); // 83
function weirdAdd( n, fun) { return n + fun()}
weirdAdd(42, function() { return 41 })
- 函数与数字一样可以被另一个函数返回 ```js function add() { var num1 = 42; return function(num2) { return num1 + num2 } } fun = add(); fun(41); // 83
所以,一等函数被看成与其他数据一样的函数:
如同封建社会的社会学关系中,人分三六九等一样,一等公民具有最高的优先权。在
JavaScript
的函数式编程范式中,我们也经常听到这样一句话 "函数是一等公民" (first-class citizens)。那我们如何去理解这句话呢?“一等” 这个词通常用来描述值的。当函数被看作是“一等公民”, 就是函数优先(First-class Function),于是它就可以去任何值可以去的地方,按照正确的姿势,很少有限制。
"函数是一等公民" ,也就是说函数拥有值的一切特性,你可以像看待一个值一样来看待一个函数。
一、值的特性
举个例子,数字对象在
JavaScript
中是一等公民,那么数字拥有的特性,也同样被函数所拥有。函数与数字一样可以存储为数组的一个元素
函数与数字一样可以作为对象的成员变量
weirdAdd(42, function() { return 41 })
二、函数自身的特性
所以,一等函数被看成与其他数据一样的函数: