簡體   English   中英

Javascript-此與窗口

[英]Javascript - this vs window

如果可以,如果未在函數中調用代碼,是否應該使用它代替window?

this.addEventListener(...);

vs

window.addEventListener(...);

這要短2個字符,如果可以的話,使用它更好嗎?

我建議避免使用“ this”,除非通過callapplybind明確指定了它。 這樣,從未有什么什么問題this是指。 我也喜歡總是顯式聲明對全局對象的訪問:

(function(global, document, undefined){
    global.myGlobalVar = 'foo';
})(window, document);

這樣一來,當我在全局范圍內執行任何操作時,始終很清楚,可以將代碼更輕松地移植到非瀏覽器環境(如node.js ,undefined始終是undefined,等等。

如果您沒有明確顯示全局訪問權限,而不得不稍后嘗試找到它,您后悔。 如果您要全局注冊一個事件處理程序(可能不是最好的主意),那么您一定要記下它。

編輯:應該提到在嚴格模式下, this在全局范圍內是未定義的。

thiswindow不是同一回事。 根據上下文, 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.

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