以下 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
将产生你想要的。
不过,我不得不承认我看不出这样做的意义。如果您真的想在该范围内a
获取文字值'hello'
,那么为什么要创建另一个范围?作为a
一个声明为的普通变量a = 'hello'
就足够了。现在,如果你想a
用另一个变量的值替换(可能在循环或其他东西中改变)do (a = b) ->
然后我认为它更有意义,但你可以简单地做do (a) ->
,只是使用a
而不是b
在do
范围内。
如果您使用的是Module Pattern,则在使用可能相互冲突的多个 Javascript 库时使用 $ global 很有用:
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
但你真的为什么要这样做?您尝试实现的更完整的用例是什么