[英]Javascript - this vs window
如果可以,如果未在函數中調用代碼,是否應該使用它代替window?
this.addEventListener(...);
vs
window.addEventListener(...);
這要短2個字符,如果可以的話,使用它更好嗎?
我建議避免使用“ this”,除非通過call
, apply
或bind
明確指定了它。 這樣,從未有什么什么問題this
是指。 我也喜歡總是顯式聲明對全局對象的訪問:
(function(global, document, undefined){
global.myGlobalVar = 'foo';
})(window, document);
這樣一來,當我在全局范圍內執行任何操作時,始終很清楚,可以將代碼更輕松地移植到非瀏覽器環境(如node.js
,undefined始終是undefined,等等。
如果您沒有明確顯示全局訪問權限,而不得不稍后嘗試找到它,您將后悔。 如果您要全局注冊一個事件處理程序(可能不是最好的主意),那么您一定要記下它。
編輯:應該提到在嚴格模式下, this
在全局范圍內是未定義的。
this
和window
不是同一回事。 根據上下文, this
可以指任意數量的元素,而window始終表示window。
有關更多信息,請參見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
您正在尋找什么論點; 或多或少地輸入兩個字符是不是。
這個和窗口是不同的東西。
“窗口”是整個網頁。 “這”取決於您所處的功能。
在Web瀏覽器的環境中,如果未提供其他上下文,則this
引用Window對象。
使用Window
可以減少疑點,因此如有必要,我將使用Window
。
請注意,出於性能原因,始終將事件偵聽器添加到盡可能小的上下文中始終是一種好習慣。
如果僅一部分DOM需要偵聽事件,則無需在瀏覽器全局范圍內添加事件監聽器。
除了body元素上的事件偵聽器之外,還可以刪除例如 彈出窗口,我從未將eventlisteners添加到Window對象。
這是指您當前位於其中的任何代碼塊的父級。 如果代碼在click事件中,則“ this”是指調用事件的控件。 如果代碼在頁面加載時運行,則“ this”是指瀏覽器窗口。 使用“窗口”使您所引用的內容更加明顯,並使代碼更具可讀性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.