Coffeescript array.sort(a,b)生成失败的JS

Jim*_*mes 5 javascript function coffeescript

我正在使用coffeescript(版本1.11.1),我遇到了一些我正在努力描述的东西.我只是想通过一个字段对一组对象进行排序,我可以这样做:

data.sort (a,b) ->
    if a.name < b.name then -1 else if a.name > b.name then 1 else 0
Run Code Online (Sandbox Code Playgroud)

这会产生以下javascript:

data.sort(function(a, b) {
  if (a.name < b.name) {
    return -1;
  } else if (a.name > b.name) {
    return 1;
  } else {
    return 0;
  }
});
Run Code Online (Sandbox Code Playgroud)

真棒.但在我的第一次尝试中,我改为:

data.sort(a,b) ->
    if a.name < b.name then -1 else if a.name > b.name then 1 else 0
Run Code Online (Sandbox Code Playgroud)

生成的javascript就是:

data.sort(a, b)(function() {
  if (a.name < b.name) {
    return -1;
  } else if (a.name > b.name) {
    return 1;
  } else {
    return 0;
  }
});
Run Code Online (Sandbox Code Playgroud)

其中,因为javascript是如此有用,无声地失败(至少在Chrome中)并导致周围的功能过早地返回.有点沮丧,但我会克服它.

首先,我想确认这是预期的行为.我想这可能是,我有一些模糊的想法在我的头骨周围蹦蹦跳跳,为什么会这样做,但我希望得到一个更坚定的理解.该如何描述或该语言的这一特性与哪些术语相关?

Ank*_*nko 4

这是预期的行为。

\n\n
\n\n

CoffeeScript 支持以下所有内容:

\n\n
    \n
  • (a, b) -> 5函数的符号,

  • \n
  • -> 5无参数函数的符号,

  • \n
  • f(a, b)函数调用的符号,以及

  • \n
  • f a函数调用的表示法(隐式括号)。

  • \n
\n\n

f(a, b)那么如何使用函数参数来调用函数调用的结果呢-> 5

\n\n

答案是\xe2\x80\x94

\n\n
f(a, b) -> 5\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x94 正如您所注意到的,它看起来与 \xe2\x80\x94 非常相似

\n\n
f (a, b) -> 5\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x94 翻译为调用f,将函数(a, b) -> 5作为参数传递。

\n