所以我有一个关于Coffee Script的愚蠢问题。我给它第二次机会,但为什么它会返回 所有内容 ?
与函数的最后一个语句/行有什么关系?以及如何禁用此功能?把评论或其他东西作为最终的“表达”,我知道这是一个“记录”的特征,但没有;不,不是真的,我如何不返回 到处?并保存下载/执行时间?
这种行为肯定会让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数据。
此外,一个没有返回的函数,返回undefined
和一个返回null
的函数,无需解释。如果我愚蠢到足以检查这一点,那就是全面错误。
我确信会有一些性能差异,但我不知道这一点,而且现在我没有时间做一些jsperfs,但我会感兴趣。
答案 0 :(得分:5)
是的coffeescript将始终返回该函数的最后一行。它可以做到这一点,因为coffeescript中的所有内容都是表达式。
来自docs:
一切都是表达(至少,尽可能多)
您可能已经注意到,即使我们没有将返回语句添加到CoffeeScript函数中,它们仍会返回它们的最终值。 CoffeeScript编译器尝试确保语言中的所有语句都可以用作表达式。观察返回如何在下面的函数中下推到每个可能的执行分支中。
可以看到他们的例子here
您仍然可以使用return
声明
即使函数总是返回它们的最终值,但是当你知道你已经完成时,它既可以并且被鼓励从函数体提前返回,写出显式返回值(返回值)。
答案 1 :(得分:0)
这是因为它是函数的最后一个语句/行,是的。默认情况下,functions in CoffeeScript always return a value。这通常不是一件坏事,但如果您真的不想返回任何内容,则可以添加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:
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';
});
}
};