создание функции в итерации - PullRequest
1 голос
/ 20 апреля 2020

Я обнаружил некоторый код, который сортирует массив javascript. Внутри обратного вызова sort объявлена ​​вспомогательная функция. Является ли менее эффективным, чтобы это было объявлено внутри рода? Является ли более эффективным сделать помощника вне сортировки и затем использовать в функции сортировки? до

rows.sort((rowA, rowB) => {
  const getValue = row => {
    const sortValue = row.value;
    if (isNaN(sortValue)) {
      return sortValue.toLowerCase();
    } else {
      return sortValue;
    }
  };
  return getValue(rowA) < getValue(rowB) ? -1 : 1;
});

после

const getValue = row => {
  const sortValue = row.value;
  if (isNaN(sortValue)) {
    return sortValue.toLowerCase();
  } else {
    return sortValue;
  }
};
rows.sort((rowA, rowB) => {
  return getValue(rowA) < getValue(rowB) ? -1 : 1;
});

1 Ответ

1 голос
/ 21 апреля 2020

В общем случае - это не имеет значения для 99% сценариев использования.

Сортировка занимает N log(N) времени, поэтому любая сложность с постоянным временем, которую вы добавляете перед запуском, не влияет на сложность.

Подробно - да, это будет медленнее, потому что вам нужно помещать целую функцию в память каждую отдельную итерацию.

В дизайне - не помещайте никакие функции в другие функции, если вы не javascript эксперт и вы на 100% уверены, что хотите этого.

Вывод - практически нет причин помещать функцию в другую функцию, и в этом случае есть несколько недостатков, поэтому не делайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...