2014-10-01 73 views
0

我想通過試用我的控制檯和plunker來看到隱含的全局變量是如何工作的。隱含的全局變量和全局對象

我創建一個自調用函數,

(function() { 
    toto = 1; 
})(); 

按照書我讀,

... implied globals are technically not real variables, but they are properties of the global object.

我想看看這個函數調用後,我可以作爲全局對象的屬性來訪問toto - 在瀏覽器中,它是window

當我使用hasOwnProperty('toto')(通過直接在控制檯中輸入),我得到了錯誤。 我想我會使用in,事實上,toto是「在」窗口(所以,它不是在窗口本身,而是它的一個子對象)

你能說一些嗎? 任何想法如何使用Chrome Web Tools來檢查在任何給定時間聲明的所有變量的狀態?

+3

無法重現:http://jsfiddle.net/tbn2mzar/顯示爲「true」。 – JJJ 2014-10-01 19:58:08

+0

我在Chrome控制檯中嘗試了這一點,並在窗口和window.hasOwnProperty(「toto」)''返回'true'中都「toto」。你能否給我們更多關於如何重現這種行爲的指示? – 2014-10-01 20:01:12

+0

好吧,這很有趣。當你試圖從控制檯窗口直接得到這個值,你會得到錯誤..這很奇怪嗎? – 2014-10-01 20:01:22

回答

0

您可能正在從控制檯運行hasOwnProperty,並且您選擇了錯誤的幀。

我在構成plunker網站的所有框架中運行了hasOwnProperty命令,並且在某些框架中我同時得到了true和false兩個toto甚至沒有初始化(ReferenceError:toto未定義)。

+0

有沒有更安全/更有效的方式來查看這些東西沒有console.logging? – 2014-10-01 20:21:32

+0

您可以檢查全局對象在執行前後的屬性,然後對其進行區分 - http://jsfiddle.net/d4rjxocb/ – 2014-10-01 21:00:00