Назначение одной и той же функции различным переменным

Я просматривал источник WURFL.js и увидел это в нижней части страницы:

var logo=document.getElementById("hero"),heroText=document.getElementById("hero"), ...

Очевидно, переменные, logo а также heroText, имеют в виду одно и то же. Разве это не ненужные накладные расходы при разборе DOM в JavaScript (поскольку JavaScript должен искать идентификатор hero каждый раз)? По-видимому, более эффективным является:

var logo=document.getElementById("hero");
var heroText = logo;

В таком случае, heroText может быть другим объектом или также может ссылаться на тот же объект, что и logo, Я не знаю, потому что я не знаю, как работает интерпретатор JavaScript (я же человек на C#, хотя и учусь).

Так что мой вопрос действительно такой: (я предполагаю, что WURFL не ошибся), как JavaScript интерпретирует две строки? Заранее спасибо.

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;

Там явно швы, чтобы быть ошибкой. Так как document.getElementById возвращает "живое" представление узла. Это означает, что всякий раз, когда этот элемент изменяется, переменная, которая содержит узел (logo, heroText), также изменяется; также, если вы проверите эти две переменные на равенство, они будут одинаковыми.

Другие вопросы по тегам