这太荒谬了......
为什么我尝试这样做时会出错?
#...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
我想做的就是打电话给私人电话......
答案 0 :(得分:5)
driis是正确的。扩展他的答案:你可能习惯了JavaScript习语
function generateGuid() { ... }
允许您从其范围内的任何位置(甚至在其定义之前)调用generateGuid
。 CoffeeScript不这样做;相反,它编译为
var generateGuid = function() { ... }
这样做有几个原因,但长期和短期是函数遵循与所有其他变量相同的范围规则。在将值分配给generateGuid
之前,generateGuid()
是尝试调用undefined
。
请注意,由于异步回调在JavaScript中的工作方式,这将起作用:
setTimeout (->
g = generateGuid
# ...codecodecode...
), 0
generateGuid = -> ...
答案 1 :(得分:3)
您正在尝试在定义之前调用该函数。 This works:
#...codecodecode...
#...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
g = generateGuid()
如果你对此感到惊讶,请记住Coffeescript编译为Javascript - 实际上,它只比一些Javascript的语法糖更多。在Javascript中适用的大多数规则也适用于Coffeescript。