Coffeescript 为什么可以';我不能调用这个函数吗?
这太荒谬了 为什么我尝试这样做时会出错Coffeescript 为什么可以';我不能调用这个函数吗?,coffeescript,Coffeescript,这太荒谬了 为什么我尝试这样做时会出错 #...codecodecode... g = generateGuid() #...codecodecode... generateGuid = -> "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace /[xy]/g, (c) -> r = Math.random() * 16 | 0 v = (if c is "x" then r else (r & 0x3 |
#...codecodecode...
g = generateGuid()
#...codecodecode...
generateGuid = ->
"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace /[xy]/g, (c) ->
r = Math.random() * 16 | 0
v = (if c is "x" then r else (r & 0x3 | 0x8))
v.toString 16
我只想调用一个私有函数…您试图在函数定义之前调用它:
如果您对此感到惊讶,请记住Coffeescript可以编译成Javascript——事实上,它只不过是一些Javascript的语法糖分。Javascript中应用的大多数规则在Coffeescript中也适用。driis是正确的。进一步说明他的答案:您可能已经习惯了JavaScript的习惯用法
function generateGuid() { ... }
它允许您从其范围内的任何位置(甚至在其定义之前)调用generateGuid
。CoffeeScript不会这样做;相反,它编译为
var generateGuid = function() { ... }
这样做有几个原因,但其长短不一的原因是函数遵循与所有其他变量相同的范围规则。在将值分配给generateGuid
之前,generateGuid()
尝试调用undefined
注意,由于异步回调在JavaScript中的工作方式,这将起作用:
setTimeout (->
g = generateGuid
# ...codecodecode...
), 0
generateGuid = -> ...
请在帖子中包含错误消息/详细信息,并选择更合适的标题和所需行为的描述。除了在javascript中,在定义函数之前调用函数,因为函数的提升
setTimeout (->
g = generateGuid
# ...codecodecode...
), 0
generateGuid = -> ...