Javascript 将同一函数分配给不同的变量

Javascript 将同一函数分配给不同的变量,javascript,wurfl,Javascript,Wurfl,我在浏览源代码时,在页面底部看到: var logo=document.getElementById("hero"),heroText=document.getElementById("hero"), ... 显然,logo和heroText这两个变量所指的是同一事物。这不是JavaScript中DOM解析的不必要开销吗(因为JavaScript每次都要查找idhero?显然,更有效的方法是: var logo=document.getElementById("hero"); var hero

我在浏览源代码时,在页面底部看到:

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#person,一个学习者)


所以我的问题是:(我假设WURFL没有犯错误)JavaScript如何解释这两行代码?提前谢谢。

显然有错。因为
document.getElementById
返回节点的“活动”表示形式。这意味着,每当该元素改变时,保存该节点的变量(logo,heroText)也会改变;此外,如果您检查这两个变量是否相等,它们将是相同的。

显然是错误的。因为
document.getElementById
返回节点的“活动”表示形式。这意味着,每当该元素改变时,保存该节点的变量(logo,heroText)也会改变;另外,如果您检查这两个变量是否相等,它们将是相同的。

如果不返回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;
不同之处在于(如果它没有返回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;

当涉及到HTMLElement
logo===heroText
时,它是正确的,所以是的,它是相同的,并且似乎不必要,但这取决于它的使用方式,我认为?按元素id进行查找速度足够快,不会对页面的行为产生真正的影响。当涉及到HtmleElement
logo===heroText
时,这是正确的,所以是的,这是相同的,而且似乎不必要,但这取决于它的使用方式,我认为,按元素id进行查找速度足够快,不会对页面的行为产生真正的影响。