Javascript如何将未声明的函数用作对象有助于在计算机之间划分任务?

Dae*_*est 5 javascript arrays computer-science

我最近读到这篇文章试图解释JavaScript如何操作函数的能力可以让世界上的每台计算机在处理互联网上的所有信息时做一小部分.我理解的方式是这样的:

function map(fn, a)
{
    for (i = 0; i < a.length; i++)
    {
        a[i] = fn(a[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数map允许您快速调用函数到数组中的每个元素

map( function(x){return x*2;}, a );
Run Code Online (Sandbox Code Playgroud)

和JS允许您在不声明的情况下调用函数.前提是,如果互联网上的所有数据都存储为数组,您可以(以某种方式使用map)分割对数组中的每个项目或世界上所有计算机之间的每个项目进行一些特定更改的任务.

这是我不明白的部分 - 为什么你需要map或JS的数组操作来做到这一点?难道你不能只发送每台计算机的一部分数组,向它们发送运行在数组中每个元素上的函数,并让它们转换数组而不需要执行map或任何数量的古怪函数使用?

当然,使用函数作为对象似乎很方便,但为什么这对于在CPU之间拆分任务的任务是不可或缺的?

Ber*_*rgi 3

不,你在这里得出了错误的结论。Joel 并不是提倡使用 JavaScript 来“让世界上的每一台计算机在处理互联网上的所有信息中发挥一小部分作用”。他使用 JavaScript 作为选择的语言来演示map和函数的reduce功能(顺便说一句,可以将其定义为比仅针对数组更通用的语言)。然后,他确实完全离开了 JavaScript 领域,认为编程语言需要一定程度的抽象(一等函数)才能提供帮助:

具有一流函数的编程语言可以让您找到更多抽象机会,这意味着您的代码更小、更紧凑、更可重用且更具可扩展性。

作为一个概念(没有任何特定的语言实现),mapreduce如此有用,是因为它们绝对是通用的,能够通过传递不同的函数来表达任何类型的数据聚合。只要它们是纯粹的,它们就可以轻松并行化,并且可以在多核机器甚至互联网规模的集群上实现,而无需更改算法或结果。