顶级变量不是全局范围的,并且返回值在CoffeeScript中是必需的

fan*_*ncy 3 javascript coffeescript

funName = () ->
  $(".foo").addClass("bar");
Run Code Online (Sandbox Code Playgroud)

编译成匿名函数的范围.funName从控制台调用会导致undefined.

(function() {
  var funName;
  funName = function() {
    return $(".foo").addClass("bar");
  };
}).call(this);
Run Code Online (Sandbox Code Playgroud)

这样编译的原因是什么?如何使用它?

此外,使用CoffeeScript对函数内强制返回的任何见解都会很棒.为什么会那样?我如何因为它而需要不同的代码?

Tre*_*ham 5

迈克在这里回答了主要问题.模块化包装器是CoffeeScript新手的常见混淆点,如以下相关问题所示:

至于你的另一个问题:如果你不想让一个函数返回任何东西,只需单独创建该函数的最后一行,return或者等价undefined.要么编译成没有的函数return.例如:

funName = ->
  $(".foo").addClass "bar"
  return
Run Code Online (Sandbox Code Playgroud)

编译成

var funName;
funName = function() {
  $(".foo").addClass("bar");
};
Run Code Online (Sandbox Code Playgroud)

注意,正在进行讨论(问题899),关于用于定义无返回函数的可能替代语法.如果当前提案被接受,您将能够将您的功能编写为

funName = -/> $(".foo").addClass "bar"
Run Code Online (Sandbox Code Playgroud)

如果你喜欢这种语法,你应该表达对它的支持.