2010-07-21 48 views
5

我在下面的代碼中說「斷點」設置斷點。還爲dataStore添加監視表達式。螢火蟲是滔滔不絕地告訴我我的變量沒有定義

function(){ 
    var self = {}; 
    var dataStore = []; 
    var areEq = UNAB.objectsAreEqual; 

    self.put = function(key, value){ 
    /*breakpoint*/ dataStore.push({key:key, value:value}); 
    } 
    return self; 
} 

在這個斷點處,Firebug告訴我「ReferenceError:dataStore沒有被定義」。嘗試檢查「areEq」的結果相同。但是,dataStore.push執行時沒有錯誤。額外的束縛:爲「自我」添加監視表達式不會顯示我期望的自我對象,只有一個屬性「put」,而不是「窗口」對象。

任何想法是怎麼回事?

回答

1

我認爲這是一個Firefox的錯誤。如果您在 var dataStore = []上設置斷點; 然後繼續,在put()中點擊斷點時。你會得到一個閉包範圍(在Firebug 1.6中)。該範圍有dataStore和self。我認爲Firefox正在優化封閉範圍,或許因爲代碼無稽之談:無法訪問數據存儲。

一個完整的測試用例最終將出現在 http://getfirebug.com/tests/script/stackoverflow/dataStoreIsNotDefined.html

也看到https://developer.mozilla.org/en/DOM/window.self

+0

感謝您確認我不瘋狂(至少不是以這種特殊方式)。並感謝您報告錯誤。 – morgancodes 2010-07-22 15:45:34

1

很可能self由Firebug解決,也可能由全球範圍內的Firefox解決,指的是當前窗口。如果您選擇除「自我」以外的其他名稱,您的代碼應該讓每個人都感到高興。

+0

你是正確的。 'window.self'和'window'是一樣的。 OP的代碼本身是完全正確的JavaScript,並且可以毫無錯誤地執行,但似乎Firebug調試器在中斷時出現錯誤的上下文。 – casablanca 2010-07-21 19:03:32

+0

我一直在創建「類」,使用var self {}超過一年,很多次,並且從來沒有遇到與自我有關的問題。我會嘗試其他的東西。謝謝! – morgancodes 2010-07-21 20:58:16

+0

我用「_this」取代了「自我」,並得到相同的行爲。煩!奇怪的! – morgancodes 2010-07-21 21:02:44