JavaScript提供了哪些功能编程方面和类似Lisp的功能?

M. *_*gan 9 javascript lisp functional-programming

在这点上,在/sf/ask/328763291/?answertab=votes#tab-top中,Kevin Cantu发表评论说:

是的,仅仅超越语法,JavaScript可能更像是一个Lisp而不是Haskell.(最初被认为是计划实施......)

此外,在Lambda终极版:100行中的JavaScript编译器中,他们说:

很明显JS和Lisp在语义层面有很强的联系[...]

我熟悉Lisp和函数式编程,但不熟悉JavaScript.所以这些命题让人想知道JavaScript有多强大.到目前为止我所读到的是它提供了lambda表达式和闭包.还提供了哪些功能性编程概念和类似Lisp的功能?例如,它是否提供尾调用递归或宏,或者将代码作为数据操作的能力(如Lisp)?

mik*_*era 10

JavaScript提供的一些东西可以被认为是"类似Lisp":

  • 一流的功能(包括lambda和闭包)
  • 动态打字
  • 动态对象模型与CLOS有一些相似之处
  • 与源代码格式(JSON)匹配的可读数据格式
  • 使用"eval"函数运行时评估(可以在交互式REPL中使用)

Javascript没有的一些东西是非常常见或其他Lisps的核心:

  • 代码和数据的同音表示(S表达式)
  • 内置链接列表/序列的文字
  • 一般支持不可变数据结构(对于Clojure尤其如此,其中每个数据结构都是持久且不可变的)
  • 用于元编程的广泛宏系统
  • 用于性能优化的可选静态类型(例如Common Lisp或Clojure中的类型提示)
  • 并发支持
  • 尾调用优化