簡體   English   中英

“窗口”是否始終在javascript的作用域鏈頂部?

[英]Is 'window' always on top of the scope chain in javascript?

我已經看到了用window.global_name定義的全局變量。 我想知道,即使此腳本將以閉包方式運行,為什么不僅僅使用global_name。

UPD :當您在閉包內部聲明它時,似乎IE並未將其顯式添加到window對象中

在任何ECMAScript環境中,作用域鏈上的最后一個對象始終是全局對象 在瀏覽器中, window是所有意圖和目的的全局對象。 如果要訪問全局對象x或全局變量x的屬性(幾乎但不是完全相同),則應使用window.x進行顯式限定,以避免x可能被解析為的屬性。作用域鏈上的另一個對象;如果您關心到非瀏覽器環境的可移植性, globalObj.x 您可以從ECMAScript 3或非嚴格ECMAScript 5中的任何位置獲取對全局對象的引用,如下所示:

var globalObj = (function() { return this; })();

如果當前或先前的范圍中可能還有另一個x ,則window.x比簡單的x更安全。 話雖如此,即使window也不是萬無一失的,因為您可以定義一個名為window的變量。

它們具有相似的效果,但是使用window可以顯式聲明您正在故意使用全局變量。 否則,讀者將不知道它是否是作用域鏈上方的var ,您只是忘了聲明它,等等。

除非你介紹另一個范圍,例如,通過包裝你的代碼的功能, window === this === <the global scope>然而, windowthis有,你可以使用數組語法(優勢window['something'] ),因此即使您僅在字符串中擁有全局名稱,也可以使用全局名稱,而無需使用諸如eval之類的邪惡事物。

答案是肯定的 如果聲明的變量不帶var關鍵字(在函數內部),則該變量將隱式成為window對象的成員,該對象將由瀏覽器自動初始化。

在函數外部,無論是否帶有var關鍵字,該變量都隱式地成為window對象的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM