0

定義我所用的開發工具在Chrome 13,當我輸入這行:全球定位在Chrome 13

var location = "Hello"; 

按Enter,改變了頁面,並給了我一個404錯誤。地址欄現在有Hello追加到最後的地址。

http://www.google.com/Hello

我發誓,我輸入了完全相同的線路了Chrome在過去,而不是有同樣的問題。我認爲位置在window.location

有什麼改變,或者我以前從未注意到這一點?

回答

2

開發人員工具中的上下文爲window是非常正常的。輸入this並查看說的是什麼。這可能是window

因此,當你鍵入:

var location = "Hello"; 

您正在試圖重新定義已經存在的全球範圍內的變量。瀏覽器中的全局範圍是window對象。因此,全球範圍內的locationwindow.location相同。

正在試圖重新定義已經存在(通過使用var)的對象不是在JavaScript錯誤。它只是忽略了var聲明並完成了一項任務。並且,將位置對象的字符串分配給新的網頁。

+0

現在想想看,這很明顯。我在這裏輸入了,而事實上,它是窗口對象。我很驚訝,我以前從未注意到這一點。 – Jonathan

2

Chrome可能已經更改了其範圍規則。我不清楚在控制檯上的var應該被視爲窗口範圍還是某個神祕的控制檯範圍。

如果你想創建一個變量命名的位置,你應該使用一個立即函數創建一個安全的範圍內,例如。例如。

(function(){ 
    var location = "hello"; // safe 
})(); 
+1

它將在全局範圍內執行,並且'location'已經在那裏存在。所以它會重寫'location',這會導致導航。就像'var foo = 123'會導致'window.foo === 123'。 – pimvdb

+0

謝謝@pimwdb,我這麼認爲。我不記得自從我最後一直堅持使用鉻以來,是否有13人以這種方式工作:/ – jimbojw

+0

是的,我完全同意包裝你的代碼是一條可行的路。原來jfriend00是正確的,因爲開發人員工具的上下文是窗口.. – Jonathan