86

如何在咖啡脚本中写这个?

f = (function(){
   // something
})();

感谢您的任何提示:)

4

8 回答 8

160

虽然你可以只使用括号(例如,你可以通过使用关键字(-> foo)()来避免它们:do

do f = -> console.log 'this runs right away'

最常见的用途do是在循环中捕获变量。例如,

for x in [1..3]
  do (x) ->
    setTimeout (-> console.log x), 1

如果没有do,您只会x在循环后打印 3 次的值。

于 2011-04-09T19:50:02.840 回答
19

如果您想“别名”传递给 CoffeeScript 中的自调用函数的参数,假设这就是您要实现的目标:

(function ( global, doc ) {
  // your code in local scope goes here
})( window, document );

然后do (window, document) ->不会让你这样做。那么要走的路是使用parens:

(( global, doc ) -> 
  # your code here
)( window, document ) 
于 2011-10-12T06:45:07.430 回答
16

喝咖啡很容易:

do ->

将返回

(function() {})();
于 2014-07-10T07:01:08.513 回答
5

尝试使用

do ($ = jQuery) ->
于 2013-11-19T11:27:08.677 回答
5

您还可以将do关键字与默认函数参数结合起来,为具有初始值的递归“自启动函数”提供种子。例子:

do recursivelyPrint = (a=0) ->
  console.log a
  setTimeout (-> recursivelyPrint a + 1), 1000
于 2014-06-05T15:18:54.857 回答
3
do ->
    #your stuff here

这将创建一个自执行闭包,这对于范围界定很有用。

于 2015-02-05T22:23:59.290 回答
1

抱歉,我解决了:

f = (
    () -> "something"
)()
于 2011-04-09T13:32:20.390 回答
0

它应该是

f = () ->
  # do something
于 2016-06-15T03:01:34.753 回答