“var d = document;”它真的有用吗?

时间:2017-07-08 20:50:05

标签: javascript

我经常看到包含这样的变量的JavaScript代码:

// Search db for items with an ampersand
var item = db.AssetMakes.Where(x => x.Name == "m & n").SingleOrDefault();
Console.WriteLine($"ID: {item?.AssetMakeID}, Name: {item?.Name}");

我只是想知道是否有兴趣使用这些变量? (如果对“文档”或“窗口”有很多调用,则减少代码量除外) 我认为答案是否定的,但以防万一...

3 个答案:

答案 0 :(得分:2)

答案是肯定的,不是。您使用它们的方式,不,没有任何好处,因为您的代码没有使用ge

您的代码使这些变量成为全局变量,应避免使用全局变量。我们可以通过将我们的代码包装在立即调用的函数表达式(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;

非常有用,因为您必须查找存储在bodydocumentElement属性中的对象,并且在解析body和{{1 DOM对象只需一次,但稍后您可以直接访问它们而无需一次又一次地解决它们。

答案 1 :(得分:0)

如果您觉得它对您有帮助,那就很有用。

有些人正在使用它作为编写程序时减少字符数的快捷方式。

对我而言,它降低了可读性,将变量添加到全局范围可能会导致一些不可预测的问题。

答案 2 :(得分:-1)

是的,当您编写documentElement时,将文档存储在此变量中是有用的,如果您想将此变量用于 var d=document

示例:

method

您可以将var d = new Date() document.write(d.getHours()) 存储在new Date()变量中,以便更容易在其他地方使用它。