无法让我的 Coffee 脚本完全编译成:
( function (root) { return 'Hello Coffee'; }(this) );
第一次尝试:
do (root) ->
'Hello Coffee'
...没有生成与上面相同的代码,输出(带--bare
):
(function(root) {
return 'Hello Coffee';
})(root);
无法让我的 Coffee 脚本完全编译成:
( function (root) { return 'Hello Coffee'; }(this) );
第一次尝试:
do (root) ->
'Hello Coffee'
...没有生成与上面相同的代码,输出(带--bare
):
(function(root) {
return 'Hello Coffee';
})(root);
没有理由相信你可以完全得到那个 JavaScript,也可能没有理由完全得到那个 JavaScript。你可以得到一些功能上等价的东西:
((root) -> 'Hello Coffee')(@)
变成这个 JavaScript:
(function(root) { return 'Hello Coffee'; })(this);
它和你的 JavaScript 做同样的事情。
该do
关键字用于循环内部:
当使用 JavaScript 循环生成函数时,通常会插入一个闭包包装器,以确保循环变量是封闭的,并且所有生成的函数不只是共享最终值。CoffeeScript 提供了
do
关键字,它立即调用传递的函数,转发任何参数。
你通常会do
在这样的事情中使用:
for x in a
do (x) ->
$("##{x}").click -> console.log x
你想打破循环变量和它在闭包中的使用之间的联系。这就是为什么root
在 JavaScript 版本中出现两次的原因
do (root) ->
'Hello Coffee'
你可以这样做
do (root = @) ->
'Hello Coffee'
这段代码将被编译成
(function(root) {
return 'Hello Coffee';
})(this);