定义一个函数并立即在Coffee中调用它,无法获得所需的结果

gre*_*emo 2 coffeescript

无法让我的Coffee脚本完全编译:

( function (root) { return 'Hello Coffee'; }(this) );
Run Code Online (Sandbox Code Playgroud)

第一次尝试:

do (root) ->
    'Hello Coffee'
Run Code Online (Sandbox Code Playgroud)

...没有生成与上面相同的代码,输出(with --bare):

(function(root) {
  return 'Hello Coffee';
})(root);
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 6

没有理由相信你可以完全获得JavaScript,并且可能没有理由得到完全相同的JavaScript.你可以获得功能相同的东西:

((root) -> 'Hello Coffee')(@)
Run Code Online (Sandbox Code Playgroud)

成为这个JavaScript:

(function(root) { return 'Hello Coffee'; })(this);
Run Code Online (Sandbox Code Playgroud)

它与JavaScript的功能相同.


do关键字用于循环内部:

当使用JavaScript循环生成函数时,通常会插入一个闭包装,以确保循环变量被关闭,并且所有生成的函数不仅仅共享最终值.CoffeeScript提供do关键字,该关键字立即调用传递的函数,转发任何参数.

你通常会使用这样do的东西:

for x in a
    do (x) ->
        $("##{x}").click -> console.log x
Run Code Online (Sandbox Code Playgroud)

你想在哪里打破一个循环变量和它在闭包中的使用之间的联系.这就是为什么root在JavaScript版本中出现两次的原因

do (root) ->
    'Hello Coffee'
Run Code Online (Sandbox Code Playgroud)


avr*_*ian 5

你可以这样做

do (root = @) ->
  'Hello Coffee'
Run Code Online (Sandbox Code Playgroud)

这段代码将编译成

(function(root) {
  return 'Hello Coffee';
})(this);
Run Code Online (Sandbox Code Playgroud)

请参阅CoffeeScript.org控制台示例