为什么我不能调用这个函数?

Jam*_*tis 2 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 | 0x8))
    v.toString 16
Run Code Online (Sandbox Code Playgroud)

我想做的就是打电话给私人电话......

Tre*_*ham 5

运动是正确的.扩展他的答案:你可能习惯了JavaScript的习惯用语

function generateGuid() { ... }
Run Code Online (Sandbox Code Playgroud)

它允许您generateGuid从其范围内的任何地方进行呼叫(甚至在其定义之前).CoffeeScript不这样做; 相反,它编译成

var generateGuid = function() { ... }
Run Code Online (Sandbox Code Playgroud)

这样做有几个原因,但它的长短是因为函数遵循与所有其他变量相同的范围规则.在分配值之前generateGuid,generateGuid()是尝试呼叫undefined.

请注意,由于异步回调在JavaScript中的工作方式,这将起作用:

setTimeout (->
  g = generateGuid
  # ...codecodecode...
), 0

generateGuid = -> ...
Run Code Online (Sandbox Code Playgroud)