如何使用coffeescript编写这段代码?
f = (function(){
// something
})();
谢谢任何建议 :)
如何使用coffeescript编写这段代码?
f = (function(){
// something
})();
谢谢任何建议 :)
尽管你可以直接使用括号(例如(-> 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
的值。
如果你想在 CoffeeScript 的自执行函数中给参数起别名,假设这就是你想要实现的:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
那么do (window, document) ->
就无法让你这样做。正确的方式是使用括号:
翻译后的内容为:
那么do (window, document) ->
就无法让你这样做。正确的方式是使用括号:
(( global, doc ) ->
# your code here
)( window, document )
do (global = window, doc = document) ->
表示定义了一个函数,其中global
和doc
是该函数的两个参数,它们分别被赋值为 window
和document
对象。 - Billy Moon在咖啡中,这太容易了:
do ->
将返回
(function() {})();
尝试使用
do ($ = jQuery) ->
do
关键字与默认函数参数结合使用,为递归的“自启动函数”提供初始值。例如:do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
do ->
#your stuff here
抱歉,我已经解决了:
f = (
() -> "something"
)()
do
关键字有一些限制,有时需要使用 JS 风格的方法(请参见 issue 960);实际上只是因为循环闭包用例才添加了 do
。 - Trevor Burnham应该是这样的
f = () ->
# do something
f = do -> console.log x
。 - scribu-> console.log 'this runs right away'
分配给f
,然后运行它;而你的则运行函数,然后将其结果分配给f
,就像原始问题中一样。(尽管在使用console.log
时,返回值总是undefined
。) - Trevor Burnham{f: do -> // something}
- scribudo
还允许您将参数传递给函数。要将1
和2
作为参数x
和y
传递,请编写do (x = 1, y = 2) ->
。(此功能的文档已经丢失,但是引入该功能的问题中有一些示例。) - Rory O'Kane