【问题标题】:Javascript as a functional languageJavascript 作为一种函数式语言
【发布时间】:2010-09-13 18:56:18
【问题描述】:

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

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

最近,我有 often read 说 Javascript 是支持函数式编程的语言之一。

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

所以总而言之,Javascript 是学习函数式编程概念的好选择吗? Javascript 中的哪些功能是相关/支持函数式编程的?

【问题讨论】:

  • 最好的方法是功能齐全。然后你就会明白利弊了。

标签: javascript functional-programming language-features


【解决方案1】:

JavaScript 支持一流的函数。请参阅Use functional programming techniques to write elegant JavaScript

【讨论】:

  • 不错的链接,正是我要找的。​​span>
【解决方案2】:

虽然javascript在一定程度上支持FP,但并不直接鼓励它。这就是为什么存在像Oliver Steele's Functional 这样的项目来填补空白的原因。所以我不会推荐它来学习FP。请改用 F#。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • “OCaml”中的“O”又是什么意思?
    • +1。 Objective Caml,所以它不是纯函数式的,而是多范式的,因为它增加了OO。
    【解决方案4】:

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

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

    【讨论】:

    • 有用的点,谢谢。更专用的函数式语言可能是更好的选择。毕竟我可能会看看 F#。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:
      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        我不记得是谁说的,但 javascript 被称为“使用 Algol 语法的方案”。因此,对于学习 Scheme/Lisp,Javascript 并不是一个糟糕的开始。请注意,尽管 Lisp 等函数式语言与 Haskell 等纯函数式语言有很大不同。

        除了“一等函数”(意味着函数是值,可以分配给变量)之外,词法范围也是函数式语言的固有部分。

        Higher Order JavascriptThe Little Javascripter 已经提到过。它们都是优秀的文本。此外,Higher Order Programming in Javascript 可能更容易开始。

        【讨论】:

          猜你喜欢
          • 2010-09-28
          • 1970-01-01
          • 1970-01-01
          • 2011-01-17
          • 2018-02-15
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多