61

我希望掌握函数式编程概念。

我多年来一直使用 Javascript 在 Web 应用程序中进行客户端脚本编写,除了使用原型之外,它都是简单的 DOM 操作、输入验证等。

最近,我经常读到Javascript 是支持函数式编程的语言之一。

以我对 Javascript 的熟悉和经验,我更喜欢用它来学习函数式编程。我希望我能够更多地专注于主要的功能概念,而不会被全新的语法所困扰或分心。

综上所述,Javascript 是学习函数式编程概念的好选择吗?Javascript 中的哪些功能是相关/支持函数式编程的?

4

8 回答 8

43

JavaScript 支持一流的函数。请参阅使用函数式编程技术编写优雅的 JavaScript

于 2008-09-28T02:49:15.377 回答
9

高阶 Javascript是熟悉 javascript 功能方面的好方法。如果您想在不深入阅读更大的书的情况下弄湿自己的脚,这也是相对较短的阅读内容。

于 2008-09-29T02:11:27.067 回答
6

尽管javascript在某种程度上支持FP,但并不直接鼓励它。这就是为什么存在像Oliver Steele 的功能这样的项目来填补空白。所以我不会推荐它来学习FP。请改用 F#。

于 2008-09-28T02:49:44.283 回答
6

我想说,虽然你可以使用 JavaScript 快速掌握一些函数式编程概念,但始终像使用函数式编程语言一样使用 JavaScript 并不是一种常见的做法。至少不是很常见。大多数人不会发布精确说明如何使用 JavaScript 进行函数式编程的教程——marxidad 指出的那个实际上是一个相当不错的例子,但你不会找到很多这样的例子。功能方面通常并不明显,就像人们在 JavaScript 中使用闭包但不知道他们正在使用它时一样。

将两个函数作为参数传递给第三个函数,然后将返回值作为与前两个函数相关的一些执行的想法是一种高级技术,几乎总是只出现在 jQuery 等成熟库的核心中. 自执行匿名函数等已经取得进展,但仍未得到一致使用。大多数教程通常侧重于 JavaScript 的 OO 功能,例如如何创建属性和方法、范围、访问控制以及如何使用构造函数的原型属性。老实说,如果你想要函数式编程,那么我会选择一门以这种能力着称的语言。

于 2008-09-28T03:05:05.917 回答
6

I don't remember who said it, but javascript has been called "Scheme with Algol syntax". So for learning Scheme/Lisp, Javascript isn't a bad start. Note though that functional languages like Lisp are quite different from pure functional languages, such as Haskell.

Apart from "first-class functions" (Meaning that functions are values, that can be assigned to variables), lexical scope is also an inherent part of what makes a functional language.

Higher Order Javascript and The Little Javascripter has been mentioned already. They are both excellent texts. In addition, Higher Order Programming in Javascript may be an easier start.

于 2008-09-29T19:31:43.600 回答
3

我会推荐阅读The Little Schemer,这是一本关于递归的相当薄的书,并且很好地介绍了函数式风格。虽然它专注于 Scheme,但它可以很容易地应用于 JavaScript,请参阅http://javascript.crockford.com/little.html。我发现它对我的 javascript 开发非常有帮助,尽管它在最后变得相当棘手。

于 2008-09-29T14:04:59.067 回答
2

Javascript是一种多范式语言。如果您的目标是学习函数式语言概念,请尝试从像OCamlHaskell这样的纯函数式语言开始。

于 2008-09-28T02:50:39.833 回答
2

此外,Eloquent JavaScript:函数式编程一章

于 2008-09-29T06:51:17.253 回答