Jim*_*mes 5 javascript function coffeescript
我正在使用coffeescript(版本1.11.1),我遇到了一些我正在努力描述的东西.我只是想通过一个字段对一组对象进行排序,我可以这样做:
data.sort (a,b) ->
if a.name < b.name then -1 else if a.name > b.name then 1 else 0
Run Code Online (Sandbox Code Playgroud)
这会产生以下javascript:
data.sort(function(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
Run Code Online (Sandbox Code Playgroud)
真棒.但在我的第一次尝试中,我改为:
data.sort(a,b) ->
if a.name < b.name then -1 else if a.name > b.name then 1 else 0
Run Code Online (Sandbox Code Playgroud)
生成的javascript就是:
data.sort(a, b)(function() {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
Run Code Online (Sandbox Code Playgroud)
其中,因为javascript是如此有用,无声地失败(至少在Chrome中)并导致周围的功能过早地返回.有点沮丧,但我会克服它.
首先,我想确认这是预期的行为.我想这可能是,我有一些模糊的想法在我的头骨周围蹦蹦跳跳,为什么会这样做,但我希望得到一个更坚定的理解.该如何描述或该语言的这一特性与哪些术语相关?
这是预期的行为。
\n\nCoffeeScript 支持以下所有内容:
\n\n(a, b) -> 5函数的符号,
-> 5无参数函数的符号,
f(a, b)函数调用的符号,以及
f a函数调用的表示法(隐式括号)。
f(a, b)那么如何使用函数参数来调用函数调用的结果呢-> 5?
答案是\xe2\x80\x94
\n\nf(a, b) -> 5\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x94 正如您所注意到的,它看起来与 \xe2\x80\x94 非常相似
\n\nf (a, b) -> 5\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x94 翻译为调用f,将函数(a, b) -> 5作为参数传递。