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

时间:2016-10-17 15:49:49

标签: 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

这会生成以下javascript:

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

真棒。但在我的第一次尝试中,我做了这个:

data.sort(a,b) ->
    if a.name < b.name then -1 else if a.name > b.name then 1 else 0

生成的javascript就是:

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

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

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

1 个答案:

答案 0 :(得分:4)

这是预期的行为。

CoffeeScript支持以下所有内容:

  • {em>函数的(a, b) -> 5符号,

  • -> 5符号表示没有参数的函数

  • {em>函数调用的<{1}}符号和

  • {em>函数调用的<{1}}符号(隐含括号)。

那么如何使用函数参数f(a, b)调用函数调用f a的结果?

答案是 -

f(a, b)

- 正如你所注意到的,看起来与 -

相似
-> 5

- 转换为调用f(a, b) -> 5 ,将函数f (a, b) -> 5 作为参数传递。