以下是 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) ->
,并在do
作用域内直接使用a
而不是b
。
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("你好")
你可以这样做
do (a = "foo")->
console.log a
但是,你为什么要这样做呢?你试图实现更完整的用例是什么?
do($ = jQuery) ->
是一个常见的用法。 - Fuad Saud