头等函数 头等函数firstclass function第一級函數是指在程序设计语言中函数被当作头等公民这意味着函数可以作为别的函数的参数函数的返回值赋值给变量或存储在数据结构中 有人主张应包括支持匿名函数函数字面量function literals在这样的语言中函数的名字没有特殊含义它们被当作具有函数类型的普通的变量对待年代中期克里斯托弗斯特雷奇在functions as firstclass citizens中提出这一概念 头等函数是函数式程序设计所必须的通常要使用高阶函数map函数就是一个高阶函数其实参是一个函数及一个list返回结果是把作为参数的函数作用于list的每个元素后的结果形成的list 把函数作为函数参数与函数返回值会遇到特别的困难特别是存在非局部变量英语nonlocal variable与嵌套函数英语nested function匿名函数历史上这被称作函数参数问题英语funarg problem 早期的指令式编程语言或者不支持函数作为结果类型如ALGOL  Pascal或者忽略嵌套函数与非局部变量如C语言早期的函数式语言Lisp采取了动态作用域方法把非局部变量绑定到函数执行点最近的变量定义Scheme语言支持词法作用域的头等函数把对函数的引用绑定到闭包closure而不是函数指针这使得垃圾收集成为必须