在coffeescript中定义函数(或方法)时,使用“:”和“=”分隔函数名称和参数列表有什么区别?

时间:2014-07-29 16:11:43

标签: javascript function coffeescript

我在文件中找不到任何参考资料。以下是一些例子。

func1 = (a, b = 4) -> b^a

func2: (a, b = 4) -> b^a

class ClassA
    constructor: (@a, @b = 4) ->

class ClassB
    constructor= (@a, @b = 4) ->

根据我的经验,我总是使用=,但我发现:已在一些博文中的几个示例中使用过。希望有人可以帮忙澄清。

1 个答案:

答案 0 :(得分:2)

他们完全不同,因为检查代码会显示出来。对于前两个功能:

func1 = function(a, b) {
  if (b == null) {
    b = 4;
  }
  return b ^ a;
};

({
  func2: function(a, b) {
    if (b == null) {
      b = 4;
    }
    return b ^ a;
  }
});

第一个定义一个函数。第二个定义了一个具有函数作为成员值的对象。

第二种方法并非特别有用(除非在函数声明中存在病态副作用),因为它创建的对象只会在之后立即丢弃它。

类示例略有不同,因为第一个将创建一个实际的构造函数,因为That's How CoffeeScript Does It。第二个创建一个名为的变量构造函数,这是一个非常不同的东西。

var ClassA, ClassB;

ClassA = (function() {
  function ClassA(a, b) {
    this.a = a;
    this.b = b != null ? b : 4;
  }

  return ClassA;

})();

ClassB = (function() {
  var constructor;

  function ClassB() {}

  constructor = function(a, b) {
    this.a = a;
    this.b = b != null ? b : 4;
  };

  return ClassB;

})();