Назначение одной и той же функции различным переменным
Я просматривал источник 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), также изменяется; также, если вы проверите эти две переменные на равенство, они будут одинаковыми.