Показать сообщение отдельно
  #4 (permalink)  
Старый 18.01.2019, 13:56
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,010

Сообщение от 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/
Ответить с цитированием