自我执行coffeescript

时间:2015-01-11 13:23:37

标签: javascript jquery coffeescript

自我调用Coffeescript

$ -> 
  alert "Hello CoffeeScript!"

编译到

$(function() {
  return alert("Hello CoffeeScript!");
});

现在,相同的代码 - $替换为任何其他变量 - >

hello= -> 
  alert "Hello CoffeeScript!"

以上代码 - 不自行执行。

如何让$变量启用自我执行(不包括jQuery lib)?(jQuery是否在这里发挥作用?)

我知道你必须使用docoffeescript中使用自我调用函数 - 这不是我的问题(请不要复制它)。

-coffeescript初学者

2 个答案:

答案 0 :(得分:3)

代码自行执行。它只是给jQuery一个函数引用。它是 jQuery ,稍后在DOM准备就绪时调用该函数(如果已经存在,则立即调用该函数)。

详情in the jQuery documentation

  

如何给$变量启用自执行(不包括jQuery lib)?

如果正在调用该函数,则jQuery明确包含 (或其他定义函数的函数并将其附加到$并调用您传递的函数)。

  

(jQuery在这里扮演一个角色吗?)


  

我知道你要使用do在coffeescript中使用自调用函数

如果你的意思是立即 -invoked而不是 self -invoked(一个常见的用词不当),不,你不会:

(() ->
  alert 'Hello!'
)()

...转换为:

(function() {
  return alert('Hello!');
})();

...定义一个函数并立即调用它。

或者,如果你真的是指 self -invoking(例如,递归):

(foo = (n) ->
  alert 'Call ' + n
  if n > 0
    foo(n - 1);
)(10)

...转换为:

var foo;

(foo = function(n) {
  alert('Call ' + n);
  if (n > 1) {
    return foo(n - 1);
  }
})(10);

...定义了一个自我调用10次的函数。

答案 1 :(得分:0)

不,$标识符没有什么特别之处。您的片段之间的实际差异是标识符后面的= - 没有,它使用函数作为参数调用它,并且函数被赋值。

hello -> 
  alert "Hello CoffeeScript!"
// compiles to:
hello(function() {
  return alert("Hello CoffeeScript!");
});

hello = -> 
  alert "Hello CoffeeScript!"
// compiles to:
var hello;
hello = function() {
  return alert("Hello CoffeeScript!");
};

因此,如果你的hello函数确实调用了给定的回调(如$ does),那么你的函数表达式将在第一种情况下执行(没有赋值)。

请注意,这不是"自我调用",因为它会调用该函数的hello / $。对于IIFE(通常称为"自我调用"),您使用Coffeescripts do keyword