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