自我调用Coffeescript
$ ->
alert "Hello CoffeeScript!"
编译到
$(function() {
return alert("Hello CoffeeScript!");
});
现在,相同的代码 - $替换为任何其他变量 - >
hello= ->
alert "Hello CoffeeScript!"
以上代码 - 不自行执行。
如何让$
变量启用自我执行(不包括jQuery lib)?(jQuery是否在这里发挥作用?)
我知道你必须使用do
在coffeescript
中使用自我调用函数 - 这不是我的问题(请不要复制它)。
-coffeescript初学者
答案 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。