2012-08-16 109 views
2

我試圖編譯很簡單的咖啡腳本:爲什麼多次運行CoffeeScript編譯器會產生不同的輸出?

n = 4; 

使用代碼

require('coffee-script').compile(str); 

我在我的解決了這個多次做,沒有緩存的結果。我第一次這樣做,我得到:

(function() { 
    var n; 
    n = 4; 
}).call(this); 

但如果我再次調用它,我得到:

n = 4; 

爲什麼我沒有拿到包裝函數的第二次圓的,我怎樣才能讓它每次都有相同的結果。

+1

無法重現,我每次都得到相同的(包裝)代碼。你嘗試過'coffee.compile(str,{bare:false})'嗎?發佈您的代碼。 – 2012-08-16 20:49:48

+0

@Ricardo修復它,令人驚訝的行爲,因爲之前我沒有選擇options.bare。不過,很高興它被分類。如果你想發佈它作爲答案,我會接受它。 – ForbesLindesay 2012-08-17 08:28:17

回答

1

無法重現,我每次都得到相同的(包裝)代碼。使用coffee.compile(str, { bare: false })來執行封閉包裝。

0

由於範圍問題,我認爲可能會發生(即不同的產出)。

正常情況下,您只需要一個var變量語句。而且似乎是在第一次調用期間所有需要的聲明都已創建,而第二次調用只是重用了它們。

我相信這可能是由於使用相同的require('coffee-script')實例。

+0

好的,有沒有辦法禁用'coffee-script'的緩存,所以我每次都需要新鮮的? 另外,'var'語句仍然是需要的,因爲第一位get的代碼被封裝在一個自調用函數中,所以第二次調用'n'將把它賦給'global'對象。 – ForbesLindesay 2012-08-16 12:04:07

0

編譯只是第二次出於某種原因沒有工作。 CoffeeScript代碼總是包裝在一個函數中。

+0

那麼我建議開啓第二個過程?或者有另一種方法來訪問API? – ForbesLindesay 2012-08-16 14:11:04

相關問題