答案是肯定的,不是。您使用它們的方式,不,沒有好處,因爲您的代碼不使用g
或e
。
您的代碼使這些變量成爲全局變量,應該避免使用全局變量。我們可以通過將我們的代碼包裝在立即調用的函數表達式(IIFE)中來創建包圍變量的包裝器。但是,由於現在存在一個間接層,因此必須通過沿着「作用域鏈」找到它們的定義來解決對較高作用域中元素的引用。
如果您要將對全局(或更高範圍的)對象的引用傳遞到較小的作用域中,則可以稍微提高性能,因爲您將本地引用較高作用域對象並避免必須遍歷作用域鏈。所以,如果你這樣做:
(function(w, d){
// Within this function w and d are local references to global objects
w.addEventListener('resize', function() {
...
d.querySelectorAll(...);
...
});
}(window, document));
然後,有這些聲明(實際上這裏的論點)是有道理的。
此外,你必須「解決」的對象引用任何時候,你拿更少的步驟來解決這些問題,性能越好,所以當:
var w = window;
var d = document;
不是特別有用,因爲兩者都是總是全局可用,這些
var g = document.body;
var e = document.documentElement;
是因爲你必須要查找存儲在body
和documentElement
屬性的對象有用,你已經採取了「打」在解決body
和documentElement
DOM對象只有一次,但稍後您可以直接訪問它們而無需一次又一次地解析它們。
縮小...沒有其他好的重新生成 – adeneo
是的,如果你不得不重複50x的對象 – PRMoureu
但降低可讀性。如果'var d'作爲本地變量的某個地方,也容易出現錯誤 – frozen