2015-05-28 276 views
-1

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

这是我的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); 
}; 
+0

是什么“它”的意思是“*在控制台告诉我这是不是一个函数*一个错误”?你能告诉我们确切的消息吗? – Biffen

+0

未捕获TypeError:enterPasture不是函数 – Jeff

+0

@Jeff您究竟如何获取此错误?你知道你不能直接在浏览器中执行CS吗? –

回答

3

这里没有转换错误。

function name(){... 

是一种快捷方式,声明变量并将函数赋值为该变量的值。当写在一个功能或文件的开始时,它是相当于

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

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

现在,如果您尝试呼叫功能之前该块出现问题。它与第一个符号一起工作,因为函数声明在范围的开始处为hoisted,但它不适用于后者,因为只有声明(var name;)而不是分配(name = function(){...)被挂起。这可能是你的问题。

+0

@aduch是的,我试图找到一种方法来清楚地说明(请参阅我的编辑) –

+0

同意,要清楚地说明它并不容易:“如果在声明之前调用了函数,那么它只会使用形式'function name()'“ – axelduch

0

没关系,我想通了,该函数获取调用它被定义之前,对不起大家