【发布时间】:2011-08-02 02:15:56
【问题描述】:
如何在coffeescript中写这个?
f = (function(){
// something
})();
感谢任何提示:)
【问题讨论】:
标签: javascript javascript-framework coffeescript
如何在coffeescript中写这个?
f = (function(){
// something
})();
感谢任何提示:)
【问题讨论】:
标签: javascript javascript-framework coffeescript
抱歉,我解决了:
f = (
() -> "something"
)()
【讨论】:
do 关键字有一些限制,有时需要使用 JS 风格的方法(参见 issue 960); do 实际上只是因为带有闭包的循环用例而被添加。
虽然您可以只使用括号(例如 (-> foo)(),但您可以通过使用 do 关键字来避免它们:
do f = -> console.log 'this runs right away'
do 最常见的用途是在循环中捕获变量。例如,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
如果没有do,您只会在循环 3 次后打印x 的值。
【讨论】:
f = do -> console.log x
-> console.log 'this runs right away'分配给f,然后运行它;你的运行该函数,然后将其结果分配给f,就像在原始问题中一样。 (虽然在console.log的情况下,返回值始终是undefined。)
{f: do -> // something}
do 还允许您将参数传递给函数。要将1 和2 作为参数x 和y 传递,请编写do (x = 1, y = 2) ->。 (此功能的文档有gotten lost,但the issue where the feature was introduced 有一些示例。)
如果您想为 CoffeeScript 中传递给自调用函数的参数“别名”,假设这就是您想要实现的目标:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
那么do (window, document) -> 不会让你这样做。那么要走的路是用括号:
(( global, doc ) ->
# your code here
)( window, document )
【讨论】:
do (global=window, doc=document) ->
尝试使用
do ($ = jQuery) ->
【讨论】:
您还可以将do 关键字与默认函数参数结合起来,为具有初始值的递归“自启动函数”提供种子。示例:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
【讨论】:
喝咖啡很容易:
do ->
将返回
(function() {})();
【讨论】:
do ->
#your stuff here
这将创建一个自执行闭包,这对于范围界定很有用。
【讨论】:
应该是
f = () ->
# do something
【讨论】: