coffescript函数 - 不是函数

时间:2015-05-28 14:08:40

标签: javascript coffeescript

我遇到coffeescript问题,当我通过js2.coffee将javascript函数转换为coffeescript函数时,我在控制台中收到错误告诉我它不是函数。当我将coffeescript翻译回javascript时,我发现它不是一个功能,但它是一个变量。任何帮助将不胜感激!

这是我的js功能

function enterPasture (goat, xpos, ypos) {
  map.addChild(goat);
  goat.x = mapToPixelX(xpos, ypos);
  goat.y = mapToPixelY(xpos, ypos);    
};

这里是coffeescript翻译

enterPasture = (goat, xpos, ypos) ->
  map.addChild goat
  goat.x = mapToPixelX(xpos, ypos)
  goat.y = mapToPixelY(xpos, ypos)
  return

这里的翻译回到了javascript

var enterPasture;

enterPasture = function(goat, xpos, ypos) {
  map.addChild(goat);
  goat.x = mapToPixelX(xpos, ypos);
  goat.y = mapToPixelY(xpos, ypos);
};

2 个答案:

答案 0 :(得分:3)

这里没有转换错误。

function name(){...

是一个快捷方式,用于声明变量并将函数指定为该变量的值。当在函数或文件的开头写入时, 等同于

var name;
name = function(){...

在JavaScript中,函数是"first class citizens",这意味着它们是有效值,可以分配给变量。

现在,如果您在该块之前尝试调用 函数,则会出现问题。它适用于第一种表示法,因为函数声明是hoisted到范围的开头,但它不适用于后者,因为只有声明(var name;),而不是赋值(name = function(){...),被悬挂。这可能是你遇到的问题。

答案 1 :(得分:0)

没关系,我想通了,这个功能在定义之前被调用了,对不起每个人