簡體   English   中英

我們為什么要寫窗口。

[英]Why do we write window.?

在向網頁添加一些初始化代碼的同時,我發現自己正在寫一個window.onload = ... ,這是一個想法打擊我的第五次。

window. 沒有必要,因為window是當前對象。 所以它是可選的!
但沒有人只是寫onload = ...我想知道為什么會這樣。

我的意思是,我們對編寫其他東西沒有疑慮,沒有window.alert window. 預選賽。

window.onload = function() {
  alert('Your window has loaded');
};

實際上, alertonloadwindow對象的一種方法。
那么,為什么差異呢? 為什么像W3C這樣的正式網站會這樣做呢?

我看到以下原因:

  1. 減少對范圍鏈的搜索將略微改善性能。 這也可以在IIFE中看到,其中window作為參數發送到函數,並且在其內部使用對窗口的本地引用。
  2. 如果定義的函數/成員window全球在范圍重寫,那么它會未如預期,所以引用明確使它指向正確的函數/成員的工作。 這對於創建與全局函數同名的函數/成員非常有用,並且仍然能夠從陰影作用域訪問全局成員。

因為.onload不是window獨有的。 例如,它也可以用作document.onload 因此,您可以根據希望執行腳本的時間來定義它。

我們寫window. 當我們想要明確它時。 基本上有兩種情況,這是使用它的好形式:

  • window對象的屬性和方法 - Window界面的一部分。 您提到的.onload偵聽器就是一個示例,例如window.scrollYwindow.statuswindow.parentwindow.open()window.focus()window.removeEventListener()等。
  • 創建全球屬性。 從任何范圍分配window.myGlobalVar是創建全局“變量”的常用JS習慣用法。 不可否認,使用var明確聲明它仍然是更好的做法。

雖然我們可以“選擇性地”省略window. 在這里,這是不常見的。 特別是通過賦值創建隱式全局變量被鄙視,並且通常被視為錯誤。 因此,如果您故意這樣做,則使用window.聲明您的意圖window.

但是,第一種情況並不總是很明確。 我們經常省略window. part當我們想要使用的屬性本質上是一個靜態的全局變量時,即使在它上面正式指定它也不一定與window對象有關。 你很少看到有人在window.使用documentatob()WorkersetTimeout()fetch() window. 前綴,就像你不使用window.JSON.parsewindow.Array內置對象 (雖然這將是有效的)。

對於一些其他屬性,如navigatorlocationalert()它並不總是很清楚,那些使用的可能是五十五,沒有或沒有。

window對象默認由瀏覽器初始化。 它是一個很好的做法,明確定義窗口對象,它會影響性能,你的代碼將變得可以理解。

暫無
暫無

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

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