Вот еще один метод для итерации объекта.
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
Object.keys(p).forEach(key => { console.log(key, p[key]) })
Определенно. Память потребовала для хранения, который только был бы указателем на Объект DOM, и это значительно менее болезненно, чем выполнение DOM ищет каждый раз, когда необходимо использовать что-то!
Код Idealish:
var scale_select = document.getElementsByName('scale_select');
for (var i = 0; i < scale_select.length; i++)
scale_select[i].onclick = vSetScale;
Умная реализация DOM сделала бы свое собственное кэширование, делая недействительным кэш, когда что-то изменяется. Но не весь DOMS сегодня может рассчитываться, чтобы быть этим умным (кашель кашель IE), таким образом, лучше, если Вы делаете это сами.
Кэширование поиска свойства могло бы помочь некоторым, но кэширование длины массива прежде, чем запустить цикл, оказалось, было быстрее.
Так объявление переменной в цикле, который содержит значение scale_select.length, ускорило бы весь цикл некоторые.
var scale_select = document.getElementsByName('scale_select');
for (var i = 0, al=scale_select.length; i < al; i++)
scale_select[i].onclick = vSetScale;
В принципе код был бы быстрее, если мы помещаем результат getElementsByName в переменную перед циклом и затем используем переменную после этого?
да.
Используйте переменные. Они не являются очень дорогими в JavaScript, и вызовы функции определенно медленнее. Если Вы циклично выполняетесь по крайней мере 5 раз по document.getElementById (), используют переменную. Идея здесь не является только вызовом функции, является медленным, но и эта определенная функция является очень медленной, поскольку это пытается определить местоположение элемента с данным идентификатором в DOM.
Oli
Кэширование свойства длины элементов, выбранных в переменной, является также хорошей идеей:
var scaleSelect = document.getElementsByName('scale_select');
var scaleSelectLength = scaleSelect.length;
for (var i = 0; i < scaleSelectLength; i += 1)
{
// scaleSelect[i]
}
Я думаю так. Каждый раз это циклично выполняется, механизм должен переоценить document.getElementsByName оператор.
С другой стороны, если значение сохраняется в переменной, чем оно уже имеет значение.
Нет никакого смысла хранящего scaleSelect.length в отдельной переменной; это на самом деле уже находится в одном - scaleSelect.length, просто атрибут массива scaleSelect, и как таковой, это столь же быстро к доступу как любая другая статическая переменная.