如何把这些写在咖啡纸上?
f = (function(){ // something })();
谢谢你的建议:)
Apologies, I solved it:
f = ( () -> "something" )()
While you can just use parentheses (e.g. (-> foo)(), you can avoid them by using the do keyword:
(-> foo)()
do
do f = -> console.log 'this runs right away'
The most common use of do is capturing variables in a loop. For instance,
for x in [1..3] do (x) -> setTimeout (-> console.log x), 1
Without the do, you'd just be printing the value of x after the loop 3 times.
x
If you want to "alias" the arguments passed to self-invoking function in CoffeeScript, and let's say this is what you are trying to achieve:
(function ( global, doc ) { // your code in local scope goes here })( window, document );
Then do (window, document) -> won't let you do that. The way to go is with parens then:
do (window, document) ->
(( global, doc ) -> # your code here )( window, document )
try to use
do ($ = jQuery) ->
You can also combine the do keyword with default function parameters to seed recursive "self-initiating functions" with an initial value. Example:
do recursivelyPrint = (a=0) -> console.log a setTimeout (-> recursivelyPrint a + 1), 1000
it's ridiculous easy in coffee:
do ->
will return
(function() {})();
do -> #your stuff here
This will create a self executing closure, which is useful for scoping.
It should be
f = () -> # do something