2015-01-11 41 views
0

自我調用的CoffeeScript自我執行的CoffeeScript

$ -> 
    alert "Hello CoffeeScript!" 

編譯成

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

現在,同樣的代碼 - $與任何其他變量替換 - >

hello= -> 
    alert "Hello CoffeeScript!" 

以上代碼 - 不能自行執行。

如何給$變量啓用自我執行(不包括jQuery庫)?(是jQuery是扮演一個角色嗎?)

我知道你已經使用do有在coffeescript自我調用函數---這不是我的問題(請不要複製它)。

-coffeescript初學者

+0

我認爲'hello'是拼寫錯誤後的'='?否則,你*沒有*只是將'hello'換成'$',你已經改變了代碼。 –

回答

3

的代碼自動執行。它只是給jQuery一個函數引用。它是jQuery,稍後在DOM準備就緒時(或者如果已經存在的話)立即調用該函數。

詳情in the jQuery documentation

如何給$變量啓用自我執行(不包括jQuery庫)?

如果函數被調用,jQuery的明確包括(或別的東西,它定義的函數,它重視$並要求你通過它的功能)。

(是jQuery是扮演一個角色嗎?)

是。


我知道你已經使用do有在CoffeeScript中

如果你的意思立即 -invoked而不是 -invoked(一種常見的用詞不當)自調用函數,不,你沒有:

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

...哪transla tes:

(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倍的功能。

+0

我正在嘗試coffeescript.org編譯器上的代碼,$(callback)正在調用該函數 - 那麼,coffeescript.org的comipler默認包含jquery? –

+2

@VivekChandra:不,它不是編譯器。編譯器不知道關於'$'的任何內容(也不瞭解jQuery)。它只是將你的coffeescript代碼編譯爲'$'函數的調用。 *當執行*時,jQuery完成它的工作。 – Bergi

+0

@bergi所以,jQuery庫存在於coffeescript的tryCoffeescript標籤中。理解,謝謝。 –

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

+0

很確定這是一個錯字。但即使有(或沒有)'=',它也不會**自己調用**。 –

+0

@ T.J.Crowder:是的,我打算對此發表評論。 +1在你的答案,然後:-) – Bergi

+0

我想在coffeescript.org的編譯器上的代碼,不知道如果jquery包含在那裏。但是,你好沒有自稱。 –