我剛剛花了一些時間調試一個問題,因爲忘記在新變量標識符前面使用關鍵字var
,所以Javascript在全局範圍內自動創建該變量。有沒有什麼辦法來防止這種情況發生,或者改變默認行爲,而不使用像JSLint這樣的驗證器?防止在Javascript中自動創建全局變量
在編寫和執行Javascript代碼之間運行驗證程序似乎是一個糟糕的編譯藉口,這是我通常會依賴的步驟來捕獲這類事情。
我猜測答案是「不」,所以我正在研究JSLint Eclipse插件,因爲我發佈了這個。
我剛剛花了一些時間調試一個問題,因爲忘記在新變量標識符前面使用關鍵字var
,所以Javascript在全局範圍內自動創建該變量。有沒有什麼辦法來防止這種情況發生,或者改變默認行爲,而不使用像JSLint這樣的驗證器?防止在Javascript中自動創建全局變量
在編寫和執行Javascript代碼之間運行驗證程序似乎是一個糟糕的編譯藉口,這是我通常會依賴的步驟來捕獲這類事情。
我猜測答案是「不」,所以我正在研究JSLint Eclipse插件,因爲我發佈了這個。
ES5 strict mode防止自動創建全局變量,但它可能會在一年之前,有一些認識嚴格模式的任何運輸的瀏覽器,所以JSLint的可能是你最好的賭注在那之前: -/
不是我知道 - JS開發人員歷來不願意爲核心語言添加「安全帶」,所以他們已經用JSLint等外部工具來實現。您可以考慮通過Rhino version將JSLint添加到您的構建/測試過程中,並在JSLint報告錯誤時使測試套件失敗。
答案確實不是 - 但你可以像你說的那樣使用Eclipse插件,據我所知,在保存等時運行它,所以它不需要額外的步驟。
IntelliJ IDEA還能夠發現未聲明的變量。 IntelliJ可以在你鍵入的時候實時執行,還可以分析你的代碼庫jslint風格。可能也有其他一些替代方案。
檢查this方便的小書籤由Remy Sharp創建,您可以使用它來檢查是否有任何變量滑出到全局名稱空間。
安裝Firebug,並在您的網站上啓用它。它會在你每次創建一個沒有var
的環球時發出抱怨,以及其他一些你可能會或可能不想要的情況。
您也可以使用about:config
選項javascript.options.strict
來做到這一點,但由於這是全球性的,它也會影響您瀏覽的所有其他網站。
前段時間我做了一個bookmarklet來檢查和檢測全局變量。
alt text http://yura.thinkweb2.com/detect_global.png
它有一些額外的功能(比如過濾掉的Prototype.js或谷歌Analytics(分析)屬性)了。
我已經有Firebug,它沒有抱怨。 – 2009-09-21 20:53:32
您必須確保啓用它,包括「腳本」選項卡,就像執行腳本調試時一樣;它不會自行干預。 – bobince 2009-09-21 23:42:01