功能性Javascript简介(一)

现在让我们假装去做一个任务:根据函数语言的原理,尽可能多地编写Javascript代码。

下一个系列文章是为了让你和我开始这样的旅程。首先,我们需要纠正一些你可能在你脑子里可能出现的功能语言错误的概念。

js语言的功能被严重误解了。

很明显,相当多的开发人员每天都使用Javascript的功能范型,我想说,大部分Javascript开发人员并没有真正理解这些东西。

我认为原因是大多数用于Web服务器端的开发语言都是从C派生的,我们都知道这些语言不是函数语言。

通常有两个层次的混淆,第一层是关于在下面的示例中的用法,这是jQuery中非常常用的用法:


$(。注册)。Click(函数(事件){
$(# signupmodal )显示();
Event.preventDefault();
});




在上面的代码中,我们传递一个匿名函数作为参数,这是Javascript中一个臭名昭著的回调函数。这些函数是否会被调用一点也不!

上面的例子说明了函数式语言的一个关键特性:函数是一个参数。另一方面,这个例子只使用了三行代码来违反几乎所有的功能编程范式。

第二层怀疑更微妙。

嗯,很好!但是我已经充分认识到函数式编程,我在所有的项目中使用Underscore.js。

Underscore.js是一个非常著名的和无处不在的Javascript库。例如,假设我有一套的话,我需要每个单词的第一个字母。写Underscore.js很简单:


无功firsttwoletters =功能(字){
返回_。地图(词、功能(字){)
返回_第一(Word,2);
});
};



看看这个Javascript的例子。我用精致实用的功能功能:_。地图和_。first.what你想想这个人吗

虽然功能如Underscore.js和_。地图是有用的功能范式,它使我在这种情况下,把它们放在一起有点困难。我们真的需要这样做吗

如果我们开始考虑如何更实用,也许我们可以重写上面的例子。


一点点魔力/…
Var firstTwoLetters = map (first (2));



你想,这行代码为5线以上相同。许多话只有参数占位符。真正的逻辑是将地图功能,第一个功能,和恒定的2以有意义的方式。

有些人可能会想:这个例子中的魔力在哪里毕竟,说任何例子都有点自吹自擂是有点自吹自擂的,对吧

我将使用接下来的两篇文章来解释上面的例子是如何神奇的,如果你好奇的话,你可以继续往下看。

本系列博客旨在帮助您将函数编程的美观性应用于Javascript代码。

在下一节中,我将讨论Javascript语言中的各种功能和非功能元素。通过这些知识,我们可以将这些元素集成在一起,逐步形成一个完整的大脑功能编程系统,并了解它们在Javascript中的性能。