2011-12-14 47 views
2

有什麼辦法來聲明,在「文件」範圍(將由CS被閉包)變量,沒有初始化它?一個人爲的例子:CoffeeScript的變量範圍

init = -> 
    counter = 0 

inc = -> 
    counter += 1 

這將無法正常工作,因爲您需要聲明「計數器」。在頂部添加「counter = 0」會使其工作,但「= 0」是不必要的。 (一個更現實的例子會涉及一些訪問DOM在頁面加載 - 有沒有辦法在「文件」範圍正確初始化)

回答

14

你必須定義它的外域,因爲你提到的。

counter = null 
init = -> 
    counter = 0 
inc = -> 
    counter += 1 
+5

+1。 Shorthands已經被提出,但是jashkenas堅信'= null'語法。 –

+0

我還沒有看到,但我想基本原理是保持低關鍵字計數。 – mahemoff

4

如果你的功能,其中一個對象的一部分,你可以使用@counter,像這樣:

obj = 
    init: -> 
    @counter = 0 
    inc: -> 
    @counter += 1 
0

你可以說'變種計數器;`反引號與和通過字面傳遞到產生JavaScript的。

當你有這樣的問題,看看生成的JavaScript。這將是非常清楚的變量範圍在詞彙上侷限於該功能。

望着生成的JavaScript往往是一個很好的方式來理解什麼的CoffeeScript結構的行爲。