Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2019, 00:54
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Будет ли каждый раз при переборе массива создание новой функции?
Будет ли во втором случае функция cube создаваться каждый раз во время перебора массива через map? В первом случае, как я понимаю, в возвращаемом объекте просто дается ссылка на функцию.
Случай 1:
function cube(x){ return x**3 };

var arr=[ 1, 2, 3, 4, 5 ];

arr=arr.map(i=>({ cube, value: i }));


Случай 2:
var arr=[ 1, 2, 3, 4, 5 ];

arr=arr.map(i=>({ cube(x){ return x**3 }, value: i }));

Последний раз редактировалось Teamur, 18.01.2019 в 11:57.
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2019, 09:35
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,746

Teamur,
function cube(x){ return x**3 };

var arr=[ 1, 2, 3, 4, 5 ];

arr=arr.map(i=>({ cube, value: i }));
alert(arr[0].cube===arr[1].cube);


var cube=x=>x**3;

var arr=[ 1, 2, 3, 4, 5 ];

arr=arr.map(i=>({ cube(x){ return x**3 }, value: i }));
alert(arr[0].cube===arr[1].cube);
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2019, 11:45
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Nexus,
Спасибо.

Вопрос 1:
Объект obj будет создаваться каждый раз при запуске функции x?
А если объект расположить в глобальном пространстве window, то при обращении к переменной obj, JS-движок будет перебирать миллион свойств объекта window пока не найдет obj?
function x(){
  let obj={
    lorem:1,
    ipsum:2,
    dolor:3,
  };
}


Вопрос 2:
Если в объекте сотни свойств, имеет ли значение близость имени свойства к началу алфавита с точки зрения поиска свойства, когда мы обращаемся к свойству через obj[prop]? Скажем у меня есть DOM-элемент и я записываю в него свойство нап. el.a=5, JS-движок его же быстрее найдет среди сотни нативных свойств элемента, чем если бы свойство начиналось на букву z?

К чему всё это? Я считаю что лучше ссылаться на что-то или присваивать, чем создавать заново, верно )

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

Сообщение от 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/
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2019, 14:06
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Alexandroppolus,
Обалденно всё расписал, Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При повороте устройства не каждый раз элемент меняет заданные стили Роман Андреевич jQuery 8 17.08.2016 13:03
Ошибка при переборе массива объектов ilya111 Общие вопросы Javascript 2 05.07.2016 14:50
Еще раз про очистку массива в js(интересный случай) OlegUP Общие вопросы Javascript 32 12.02.2015 14:54
Как при переборе массива к выбранным элементам присвоить тип - число Rich Общие вопросы Javascript 1 27.03.2011 13:09