【问题标题】:CoffeeScript do, pass argumentCoffeeScript 做,传递参数
【发布时间】:2015-03-06 09:13:28
【问题描述】:

以下 CoffeeScript 代码:

do (a) ->
    console.log a

生成这个:

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

如何将值传递给这样的对象?

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

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:
    do (a = 'hello') ->
      console.log a
    

    generate 正是您想要的。

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

    【讨论】:

    • do($ = jQuery) -> 是一个常见的用例
    • 在创建多个闭包的循环内使用非常好,这样每个循环迭代(每个闭包)都有自己的变量。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      log = (msg) ->
        console.log msg
      

      编译为:

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

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

      【讨论】:

        【解决方案4】:

        你可以这样做

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

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

        【讨论】:

        • 纯粹是为了更好地理解 CoffeeScript。感谢您的回答!
        猜你喜欢
        • 2016-02-01
        • 2012-07-20
        • 1970-01-01
        • 2012-11-16
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多