18.01.2019, 00:54
|
Профессор
|
|
Регистрация: 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.
|
|
18.01.2019, 09:35
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
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);
|
|
18.01.2019, 11:45
|
Профессор
|
|
Регистрация: 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.
|
|
18.01.2019, 13:56
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от 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/
|
|
18.01.2019, 14:06
|
Профессор
|
|
Регистрация: 08.06.2015
Сообщений: 206
|
|
Alexandroppolus,
Обалденно всё расписал, Спасибо!
|
|
|
|