【发布时间】: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");
【问题讨论】:
以下 CoffeeScript 代码:
do (a) ->
console.log a
生成这个:
(function(a) {
return console.log(a);
})(a);
如何将值传递给这样的对象?
(function(a) {
return console.log(a);
})("hello");
【问题讨论】:
do (a = 'hello') ->
console.log a
generate 正是您想要的。
不过,我不得不承认我看不出这样做的意义。如果您真的希望a 在该范围内获取文字值'hello',那么为什么要创建另一个范围? a 是一个声明为a = 'hello' 的普通变量就足够了。现在,如果你想用另一个变量的值替换a(可能会在循环或其他东西中改变)并做do (a = b) ->,那么我认为它更有意义,但你可以简单地做do (a) ->并使用a 而不是 b 在 do 范围内。
【讨论】:
do($ = jQuery) -> 是一个常见的用例
如果您使用的是Module Pattern,则在使用可能相互冲突的多个 Javascript 库时使用 $ 全局变量很有用:
mySingleton = do ($ = jQuery) ->
colorIt -> $('.colorme').css('backgroundColor', 'red')
mySingleton.colorIt()
【讨论】:
do 是 CoffeeScript 中的一个特殊关键字。它创建了一个闭包。我想你想要这样的东西:
log = (msg) ->
console.log msg
编译为:
var log;
log = function(msg) {
return console.log(msg);
};
像任何其他函数一样使用它:log("hello")
【讨论】:
你可以这样做
do (a = "foo")->
console.log a
但你真的为什么要这样做? 您尝试实现的更完整的用例是什么
【讨论】: