13

以下 CoffeeScript 代码:

do (a) ->
    console.log a

生成这个:

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

如何将值传递给这样的?

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

4 回答 4

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

产生你想要的。

不过,我不得不承认我看不出这样做的意义。如果您真的想在该范围内a获取文字值'hello',那么为什么要创建另一个范围?作为a一个声明为的普通变量a = 'hello'就足够了。现在,如果你想a用另一个变量的值替换(可能在循环或其他东西中改变)do (a = b) ->然后我认为它更有意义,但你可以简单地做do (a) ->,只是使用a而不是bdo范围内。

于 2012-08-08T17:09:48.097 回答
3

如果您使用的是Module Pattern,则在使用可能相互冲突的多个 Javascript 库时使用 $ global 很有用:

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

mySingleton.colorIt()
于 2013-07-24T23:42:41.187 回答
2

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

log = (msg) ->
  console.log msg

编译为:

var log;

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

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

于 2012-08-08T16:57:49.667 回答
2

你可以这样做

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

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

于 2012-08-08T17:11:01.353 回答