2012-07-25 30 views
0

我想要實現使用中的CoffeeScript自執行的匿名函數命名空間:使用在自執行匿名函數未定義

How do I declare a namespace in JavaScript?

http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/

我想也保護「未定義」從被重新定義,因爲這是文章的建議。因此,在CoffeeScript中

,我可以這樣做:

((skillet, $) -> 
    skillet.fry -> 
    alert('hi'); 
)(window.skillet = window.skillet || {}, jQuery); 

和親近的文章中描述的格式:

(function(skillet, $) { 
    return skillet.fry(function() { 
    return alert('hi'); 
    }); 
})(window.skillet = window.skillet || {}, jQuery); 

但是當我嘗試添加在不確定的..由於嚴格模式導致編譯錯誤:

http://arcturo.github.com/library/coffeescript/07_the_bad_parts.html

「某些變量,如undefined不再可寫」

我想知道是否有解決此問題的方法?我想保持嚴格的模式,因爲使用它可能有好處,我沒有完全意識到。但即使谷歌搜索的方式來關閉它...我想出了零。

謝謝你看!

+0

一般情況下,我我們從未遇到過未定義的問題 - 任何代碼都不夠好用,而且通過使用嚴格模式,您可以確保自己的代碼也是安全的。我不會爲此擔心! – 2012-07-25 22:23:05

回答

1

我想也防止被重新定義

有編譯錯誤,由於嚴格模式「未定義」:「某些變量,如不確定不再寫「

那麼你的問題是什麼?無需聲明undefined參數,因爲CoffeeScript不會讓您使用此「變量」!

如果您真的(需要/想要)擔心某個第三方腳本將值指定爲undefined,請不要在您的代碼中使用它。您可以始終使用typeof運算符或CoffeeScripts存在運算符。

只是不用擔心。我認爲除了明確的惡意攻擊之外,沒有人遇到過這樣的錯誤。

2

將自己的CoffeeScript代碼包裝在自執行的匿名中沒有意義 - 編譯器默認已經完成了這一點。

alert "Foo" 

編譯成

(function() { 
    alert("Foo"); 
}).call(this); 

如果你想確保如$引用jQuery,只需添加一個局部變量:

$ = window.jQuery 
skilett = window.skilett ? {} 
# ... rest of the code ... 

也有在試圖保護undefined,同時使用嚴格模式,因爲(作爲錯誤消息狀態)undefined不可寫,然後反正是沒有意義的。

當在「常規」模式下,你可以在你的代碼是這樣的頂部產生與價值undefined一個變量(和簡單地使用它來代替「未定義」):

undef = ((u) -> u)() 
相關問題