Сообщение от Teamur
|
Вопрос 1:
Объект obj будет создаваться каждый раз при запуске функции x?
function x(){
let obj={
lorem:1,
ipsum:2,
dolor:3,
};
}
|
да
Сообщение от Teamur
|
А если объект расположить в глобальном пространстве window, то при обращении к переменной obj, JS-движок будет перебирать миллион свойств объекта window пока не найдет obj?
|
там не будет никакого перебора свойств, максимум бинарный поиск, если оно внутри реализовано как дерево. Короче, быстро находится.
вообще если надо постоянный объект иметь, то всё делается через замыкание
var x = (function() {
var obj = {...}; // объект живет постоянно, используется в функции, не виден снаружи
return function () {... obj ...};
})();
Сообщение от Teamur
|
Вопрос 2:
Если в объекте сотни свойств, имеет ли значение близость имени свойства к началу алфавита с точки зрения поиска свойства, когда мы обращаемся к свойству через obj[prop]? Скажем у меня есть DOM-элемент и я записываю в него свойство нап. el.a=5, JS-движок его же быстрее найдет среди сотни нативных свойств элемента, чем если бы свойство начиналось на букву z?
|
как уже говорил, перебора нет, к алфавиту ничего не привязано. Хочешь микрооптимизаций - просто делай имена свойств короче, хотя это мало что дает.
в общем виде объект хранится как карта (ключ, значение). Внутри это может быть дерево или хэш-таблица.
если набор свойств не меняется, то под твой объект создается специальный "внутренний класс", поступ по именам свойств ещё быстрее.
Сообщение от Teamur
|
К чему всё это? Я считаю что лучше ссылаться на что-то или присваивать, чем создавать заново, верно )
|
в общем да, временные объекты это мусор, они заставляют сборку мусора чаще запускаться.
но вообще тут тоже всё не так просто.
https://habr.com/ru/company/oleg-bunin/blog/433318/