以下是我想看到的内容:
kango.invokeAsync('kango.storage.getItem', 'item1', function(returned1) {
kango.invokeAsync('kango.storage.getItem', 'item2', function(returned2) {
alert(returned1 + returned2);
});
});
这是我在coffeescript中写的:
kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
alert returned1 + returned2
这里的问题是,无论如何,coffeescript正在制作函数() - >回报一些东西在这种情况下,由于某种原因返回最后一个语句。
如果我使用returned2在嵌套函数中放置第二个警报,它将返回而不是第一个:
kango.invokeAsync('kango.storage.getItem', 'item1', function(returned1) {
kango.invokeAsync('kango.storage.getItem', 'item2', function(returned2) {
alert(returned1 + returned2);
return alert('something');
});
如何避免退货?
答案 0 :(得分:10)
如果您不希望某个函数返回某些内容,那么只需说出return
:
kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
alert returned1 + returned2
return
return
在CoffeeScript中的行为与在JavaScript中的行为相同,因此如果您不想要任何特定的返回值,则可以说return
。
如果未使用return
指定显式返回值,CoffeeScript函数将返回最后一个表达式的值,以便您的CoffeeScript等效于:
kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
return alert returned1 + returned2
结果将是相同的,alert
不会返回任何内容:
f = ->
alert 'x'
return
x = f()
会在undefined
中提供x
,但也会这样:
f = -> alert 'x'
x = f()
答案 1 :(得分:2)
在coffeescript中,函数始终返回最终语句。您可以通过将该函数作为最终语句来显式地使函数返回undefined
。
kango.invokeAsync 'kango.storage.getItem', 'item1', (returned1) ->
kango.invokeAsync 'kango.storage.getItem', 'item2', (returned2) ->
alert returned1 + returned2
`undefined`