我正在浏览WURFL.js来源,我在页面底部看到了这一点:
var logo=document.getElementById("hero"),heroText=document.getElementById("hero"), ...
显然,变量logo
和heroText
指的是同一件事。这不是JavaScript中DOM解析的不必要开销(因为JavaScript每次都要查找id hero
)吗?显然,效率更高的是:
var logo=document.getElementById("hero");
var heroText = logo;
在这种情况下,heroText
可能是另一个对象,或者也可能指向与logo
相同的对象。我不知道哪个是因为我不知道JavaScript解释器是如何工作的(尽管我是一个C#人,一个学习者)。
所以我的问题是这样的:(我假设WURFL没有犯错误)JavaScript如何解释这两行?提前谢谢。
答案 0 :(得分:2)
如果你做
,那么差异就是(如果没有返回DOM元素)var getObj = function() { return {} };
var a = getObj();
var b = getObj();
a.test = 'hi';
console.log(b);
// Object {}
但如果你这样做:
var getObj = function() { return {} };
var a = getObj();
var b = a;
a.test = 'hi';
console.log(b);
// Object {test: "hi"}
一个导致两个唯一对象,另一个导致两个对同一对象的引用。
var a = document.getElementById('notify-container')
var b = document.getElementById('notify-container')
a.test = 'hi'
console.log(b.test);
//"hi"
因此,在您正在展示的实例中,是的,
效率更高var logo=document.getElementById("hero");
var heroText = logo;
答案 1 :(得分:1)
显然接缝是错误的。因为document.getElementById
会返回' live'节点的表示。这意味着每当该元素发生变化时,包含节点(logo,heroText)的变量也会发生变化;另外,如果你检查这两个变量的相等性,它们将是相同的。