我最近读了this article试图解释如何利用 JavaScript 操纵函数的能力让世界上的每台计算机都在处理互联网上的所有信息方面做一小部分。我的理解是这样的:
function map(fn, a)
{
for (i = 0; i < a.length; i++)
{
a[i] = fn(a[i]);
}
}
函数 map
允许您快速调用数组中每个元素的函数
map( function(x){return x*2;}, a );
而JS允许你在不声明的情况下调用一个函数。前提是,如果 Internet 上的所有数据都存储为一个数组,您可以(以某种方式使用 map
)拆分任务,在多个 CPU 或所有计算机之间对数组中的每个项目进行一些特定更改世界的。
这是我不明白的部分 - 为什么你需要 map
或 JS 的数组操作来做到这一点?难道你不能只向每台计算机发送数组的一部分,向它们发送函数以在数组中的每个元素上运行,然后让它们转换数组而不需要执行map
或任意数量的古怪函数用法?
当然,将函数用作对象似乎很方便,但为什么这对于在 CPU 之间拆分任务的任务来说是不可或缺的?
最佳答案
不,您在这里得出了错误的结论。 Joel 并不是在提倡使用 JavaScript 来“让世界上的每台计算机都在处理互联网上的所有信息中做一小部分”。他使用 JavaScript 作为一种选择的语言来演示 map
和 reduce
函数的功能(顺便说一句,可以定义比仅针对数组更通用的函数)。然后他确实完全离开了 JavaScript 领域,认为编程语言需要一定程度的抽象 (first-class functions) 才能有所帮助:
Programming languages with first-class functions let you find more opportunities for abstraction, which means your code is smaller, tighter, more reusable, and more scalable.
那个map
and reduce
作为一个概念(没有任何特定的语言实现)如此有用是因为它们是绝对通用的,能够通过传递不同的函数来表达任何类型的数据聚合。只要那些是pure ,它们可简单地并行化,并且可以在多核机器甚至互联网规模的集群上实现,而无需更改算法或结果。
关于javascript - Javascript 将未声明的函数用作对象的能力如何帮助在计算机之间划分任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39263128/