2017-10-17 75 views
0

如果在當前作用域中找不到變量,那麼JS引擎會查找父級分數,直到達到全局範圍。現在window.someRandomVar vs someRandomVar之間的區別

,在瀏覽器中,如果我嘗試下面

console.log(someRandomVariable); 
// This throws ReferenceError as someRandomVariable is Not found on Global/Window scope. 

但是,當我明確地把它叫做窗口對象,它顯示了不確定的。

console.log(window.someRandomVariable) 

根據我的理解,前者也在窗口對象上搜索,因爲它不在任何函數範圍內。

爲什麼它有兩種不同的行爲?

回答

1
console.log(someRandomVariable); 

的Javascript中查找someRandomVariable,在任何範圍內無法找到它並拋出您所看到的例外。您在說窗口範圍被搜索時是正確的 - 但是您沒有在窗口(或任何)範圍中定義該變量。所以它失敗了。

console.log(window.someRandomVariable) 

Javascript查找window變量。它成功,然後轉到someRandomVariable屬性。這沒有定義,所以你得到undefined

可能值得注意的是,如果您試圖訪問未定義變量的屬性,那麼您也會遇到錯誤。即,試試window.someRandomVariable.someRandomVariable


的區別在於,一個是可變的查找,而另一個是一個屬性的訪問。