[英]Why do we write window.?
在向網頁添加一些初始化代碼的同時,我發現自己正在寫一個window.onload = ...
,這是一個想法打擊我的第五次。
window.
沒有必要,因為window
是當前對象。 所以它是可選的!
但沒有人只是寫onload = ...
我想知道為什么會這樣。
我的意思是,我們對編寫其他東西沒有疑慮,沒有window.
就alert
window.
預選賽。
window.onload = function() {
alert('Your window has loaded');
};
實際上, alert
與onload
是window
對象的一種方法。
那么,為什么差異呢? 為什么像W3C這樣的正式網站會這樣做呢?
我看到以下原因:
window
作為參數發送到函數,並且在其內部使用對窗口的本地引用。 window
全球在范圍重寫,那么它會未如預期,所以引用明確使它指向正確的函數/成員的工作。 這對於創建與全局函數同名的函數/成員非常有用,並且仍然能夠從陰影作用域訪問全局成員。 因為.onload
不是window
獨有的。 例如,它也可以用作document.onload
。 因此,您可以根據希望執行腳本的時間來定義它。
我們寫window.
當我們想要明確它時。 基本上有兩種情況,這是使用它的好形式:
window
對象的屬性和方法 - Window
界面的一部分。 您提到的.onload
偵聽器就是一個示例,例如window.scrollY
, window.status
, window.parent
, window.open()
, window.focus()
, window.removeEventListener()
等。 window.myGlobalVar
是創建全局“變量”的常用JS習慣用法。 不可否認,使用var
明確聲明它仍然是更好的做法。 雖然我們可以“選擇性地”省略window.
在這里,這是不常見的。 特別是通過賦值創建隱式全局變量被鄙視,並且通常被視為錯誤。 因此,如果您故意這樣做,則使用window.
聲明您的意圖window.
。
但是,第一種情況並不總是很明確。 我們經常省略window.
part當我們想要使用的屬性本質上是一個靜態的全局變量時,即使在它上面正式指定它也不一定與window
對象有關。 你很少看到有人在window.
使用document
, atob()
, Worker
, setTimeout()
或fetch()
window.
前綴,就像你不使用window.JSON.parse
或window.Array
的內置對象 (雖然這將是有效的)。
對於一些其他屬性,如navigator
, location
或alert()
它並不總是很清楚,那些使用的可能是五十五,沒有或沒有。
window對象默認由瀏覽器初始化。 它是一個很好的做法,明確定義窗口對象,它會影響性能,你的代碼將變得可以理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.