我刚刚开始阅读
JavaScript:The Definitive Guide,我不明白作者在说:
“关于JavaScript中函数最重要的是它们是真正的值,JavaScript程序可以将它们视为常规对象.”
他是什么意思,他们是“真正的价值观”?为什么这意味着他们可以像对象一样对待?
解决方法
这意味着您可以存储,读取和调用对象等函数.因此,他们称函数为“一等公民”:数据和函数之间没有不同的处理方式(至少在概念层面上没有,显然运行时环境可以以不同方式实现它).在大多数静态类型的面向对象语言中,比如旧版本的Java,这是不可能的(很容易).您可以将函数作为参数传递,将函数保存在对象中,甚至(这使得JavaScript非常特殊),打印函数的实现.
例子
将它们作为参数传递:
function foo (f,x) { return f(x); //calling f,thus f is a parameter and can be called }
这里f是那个功能.
存储它们:
您可以将函数存储在变量中:
var f = function (x) { return x+2 };
现在你可以拨打f(2)以获得4.
印刷功能:
您可以使用.toString方法获取自实现函数的签名和实现.比如节点:
> console.log(f.toString()); function (x) { return x+2 }
(显然上面列出的例子相当简单并且没有多大意义,但想象一下f例如会更新网页上的文本字段,或者执行复杂的查询,……).我希望你能体会到这一点的力量.
其他编程语言
特别是对于旧版本的Java,你无法做到这一点.例如,一段代码如:
//This is Java code to make an analogy public class Foo { public static int Bar (int x) { return x+2; } }
您无法将Foo.Bar存储到变量中,将该函数传递给另一个方法,…大多数(面向对象的)编程语言曾经明确区分数据和函数.显然有相同或不同的数据和功能处理的优点和缺点,虽然通过观察编程语言的演变,我会说对待它们似乎是社区发展的方向(显然不是每个人,这个只是个人陈述).
绝对将功能视为一等公民的编程语言是像Haskell这样的函数式编程语言 – 从概念上讲 – 没有其他类型的对象而不是函数.