CoffeeScript如何传递参数?

13

以下是 CoffeeScript 代码:

do (a) ->
    console.log a
生成以下内容:
(function(a) {
  return console.log(a);
})(a);

我该如何将一个值传递给这样一个函数?

(function(a) {
  return console.log(a);
})("hello");
4个回答

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

你可以使用生成你想要的内容。

不过,我必须承认我看不出来这样做的意义所在。如果你真的想让a在该作用域内取字面值为'hello',那么为什么要再创建另一个作用域呢?只需将a声明为普通变量a = 'hello'即可。现在,如果你想用另一个变量的值替换a(可能在循环中会改变),并执行do (a = b) ->,那么我认为这更有意义,但你可以简单地执行do (a) ->,并在do作用域内直接使用a而不是b


10
do($ = jQuery) -> 是一个常见的用法。 - Fuad Saud
它非常适合在创建多个闭包的循环内使用,以便每次迭代(每个闭包)都有自己的变量。 - Kamil Szot

3
如果您正在使用模块模式,在使用多个可能会冲突的Javascript库时,使用$全局变量是很有用的:
mySingleton = do ($ = jQuery) -> 
   colorIt -> $('.colorme').css('backgroundColor', 'red')

mySingleton.colorIt()

2

do是CoffeeScript中的一个特殊关键字,用于创建闭包。我认为你想要的是这样的:

log = (msg) ->
  console.log msg

编译成:

var log;

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

像使用其他函数一样使用它:log("你好")


2

你可以这样做

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

但是,你为什么要这样做呢?你试图实现更完整的用例是什么?


2
纯粹是为了更好地理解CoffeeScript。谢谢答复! - chenglou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接