CoffeeScript做,传递参数

时间:2012-08-08 16:46:01

标签: javascript coffeescript

以下CoffeeScript代码:

do (a) ->
    console.log a

生成这个:

(function(a) {
  return console.log(a);
})(a);

如何将值传递给此类?

(function(a) {
  return console.log(a);
})("hello");

4 个答案:

答案 0 :(得分:21)

do (a = 'hello') ->
  console.log a

generate将完全符合您的要求。

尽管如此,我不得不承认我无法理解这一点。如果您真的希望a在该范围内使用文字值'hello',那么为什么要制作另一个范围?将a作为声明为a = 'hello'的正常变量就足够了。现在,如果你想用另一个变量的值替换a(可能在一个循环或其他东西中改变)并且do (a = b) ->那么我觉得它更有意义,但你可以简单地做{{} 1}}只需在do (a) ->范围内使用a代替b

答案 1 :(得分:3)

如果您正在使用Module Pattern,那么在使用可能相互冲突的多个Javascript库时使用$ global非常有用:

mySingleton = do ($ = jQuery) -> 
   colorIt -> $('.colorme').css('backgroundColor', 'red')

mySingleton.colorIt()

答案 2 :(得分:2)

do是CoffeeScript中的一个特殊关键字。它创造了一个封闭。我想你想要这样的东西:

log = (msg) ->
  console.log msg

编译为:

var log;

log = function(msg) {
  return console.log(msg);
};

像任何其他功能一样使用它:log("hello")

答案 3 :(得分:2)

你可以这样做

do (a = "foo")->
    console.log a

但你真的为什么要这样做? WHat是您尝试实施的更完整的用例