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