Javascript 咖啡脚本总是返回

Javascript 咖啡脚本总是返回,javascript,coffeescript,Javascript,Coffeescript,所以我想问一个关于咖啡剧本的愚蠢问题。我给了它第二次机会,但为什么它会回报一切 这与函数的最后一条语句/行有关吗?如何禁用此功能?把一个评论或什么作为最后的“表达”,我知道这是一个“记录”的功能,但不是;不,这不是真的,我怎样才能不到处都有回报?并节省下载/执行时间 这种行为肯定会破坏jit吗 (locate = getPosition: () -> # Check we support geolocation throw Exception 'Yo

所以我想问一个关于咖啡剧本的愚蠢问题。我给了它第二次机会,但为什么它会回报一切

这与函数的最后一条语句/行有关吗?如何禁用此功能?把一个评论或什么作为最后的“表达”,我知道这是一个“记录”的功能,但不是;不,这不是真的,我怎样才能到处都有回报?并节省下载/执行时间

这种行为肯定会破坏jit吗

(locate =
    getPosition: () ->
        # Check we support geolocation
        throw Exception 'Your browser doesn\'t support location based services!' if !navigator.geolocation

        navigator.geolocation.getCurrentPosition (pos) ->
            console.log pos
)
编译成

(function() {
  var locate;

  locate = {
    getPosition: function() {
      if (!navigator.geolocation) {
        throw Exception('Your browser doesn\'t support location based services!');
      }
      return navigator.geolocation.getCurrentPosition(function(pos) {
        return console.log(pos);
      });
    }
  };

}).call(this);
[编辑]

我关心的原因是,这只是我构建的应用程序的一个非常大的库中的一个,如果我们说有500个函数,其中200个函数对dom做了一些事情,而不是返回数字或对象之类的东西,那么额外的200个返回就是我不想要或不需要的额外1.2k数据

另外,一个不返回的函数返回
未定义的
和一个返回
null的函数,不需要解释。如果我够蠢的去检查这个,那就大错特错了

我肯定会有一些性能差异,但我不知道这一点,现在我没有时间做一些jsperf,但我很感兴趣


是coffeescript将始终返回函数的最后一行。它可以做到这一点,因为coffeescript中的所有内容都是一个表达式

从:

一切都是一种表达(至少,尽可能多) 您可能已经注意到,即使我们不向CoffeeScript函数添加return语句,它们仍然返回其最终值。CoffeeScript编译器尝试确保该语言中的所有语句都可以用作表达式。在下面的函数中,观察返回是如何被下推到每个可能的执行分支中的

他们的例子可见一斑

您仍然可以使用
return
语句执行短路返回

即使函数总是返回它们的最终值,但当您知道已经完成时,也可以从函数体中提前返回并写出显式返回(返回值)


这是因为它是函数的最后一条语句/行,是的。默认情况下。这通常不是一件坏事,但如果确实不想返回任何内容,可以添加一行
return

如果要返回特定的内容,可以将其作为函数的最后一行:

(locate =
    getPosition: () ->
        # Check we support geolocation
        throw Exception 'Your browser doesn\'t support location based services!' if !navigator.geolocation

        navigator.geolocation.getCurrentPosition (pos) ->
            console.log pos
            'Return this string'

        return
)
JS:


如果您不希望返回值,请以一个空的
return
语句结束。准备好运行CoffeeScript“帮助”的一千个其他恼人的东西。祝你好运哈,谢谢你的提醒。就像我下面说的,我大约6个月前试过了。把它扔掉,因为它太糟糕了。再给它一次机会,看看人们为什么不停地谈论它。@DaveMackintosh为了它的价值,我已经在生产应用程序中使用了数千行coffeescript,几乎一年了,使用它除了取得惊人的成功外,什么都没有。@asawyer和我一样,然而,我并没有遇到过很多CoffeeScript加速开发的情况。对于OP,如果您开始发现自己处于调试频繁的情况下,我建议使用。好的,谢谢。我想是的,那我怎么加上我自己的回报呢?有条件地说我想在
if
语句中返回地理位置?(我不会,但作为一个例子)您可以像普通js一样使用
return
。如果你只是从coffeescript开始,我强烈建议你从头到尾阅读他们的网站。只需要大约15分钟,他们真的很好地解释了语言。太好了,谢谢!想知道6个月前咖啡脚本看起来很脆的时候,它到底是怎么回事。Thanks@DaveMackintosh我很喜欢coffeescript,但它确实有一些怪癖。@DaveMackintosh-事实上,如果你想直接返回一些东西,你根本不需要
返回。您只需将返回值设为函数的最后一行即可。结尾处的一个简单的
return
将忽略隐式返回值,@asawyer-Huh,您是对的。当我第一次尝试它时,它似乎正在编译为
return在最后一行。我认为解析器只需要一秒钟来修复自己。
var locate;

locate = {
  getPosition: function() {
    if (!navigator.geolocation) {
      throw Exception('Your browser doesn\'t support location based services!');
    }
    navigator.geolocation.getCurrentPosition(function(pos) {
      console.log(pos);
      return 'Return this string';
    });
  }
};