javascript – 函数是真值吗?

前端之家收集整理的这篇文章主要介绍了javascript – 函数是真值吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚开始阅读 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这样的函数式编程语言 – 从概念上讲 – 没有其他类型的对象而不是函数.

猜你在找的JavaScript相关文章