Как использовать локальную переменную в часто используемой функции, не объявляя ее каждый раз? - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь развить навыки использования локальных переменных.Чтобы сделать переменную локальной, я объявляю ее в функции, в которой я хочу ее использовать, верно?

Но если я использую эту функцию очень часто, я не буду объявлять эту переменную снова и снова??Это нормально или нет?

Например, если у меня есть такая функция:

function myFunction() {
  var myVariable;

  // some code that requires myVariable
}

... Я собираюсь объявлять myVariable каждый раз.Приведет ли это к тому, что пространство в памяти будет выделяться для myVariable при каждом вызове функции?Это можно обойти?

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

По сути, это не займет больше времени выполнения, если вы объявите его в области видимости своей функции.

Однако, если объявить его в рамках функции, можно сэкономить память, поскольку после выполнения функции переменная становится ненужнойи сборщик мусора удаляет его при следующем выполнении (вероятность).Если он не ограничен, он все еще там, пока не закончится выполнение сценария.Таким образом, в течение всего времени выполнения у вас есть переменная в памяти, которая, возможно, не нужна.

Чтобы помочь браузеру, вы можете использовать ключевое слово ECMAScript 2016 let для объявления переменных, поскольку там вы определяете четкую область действия ибраузер может лучше оптимизировать ваш код.

Кроме того, использование ключевого слова const вместо var может сэкономить немного памяти.Потому что при этом вы указываете, что значение больше не изменяется, и это приводит к меньшему потреблению памяти.

0 голосов
/ 25 мая 2018

Каждый вызов функции создает другой элемент в стеке.Когда элемент стека извлекается из всех локальных переменных, которые больше не используются, сборщик мусора.Поэтому лучше, если хотите, объявлять переменные локально, потому что вы действительно сэкономите память.

0 голосов
/ 25 мая 2018

Может быть, вам стоит взглянуть на лучшие практики javascript: Вот одна из многих возможных ссылок

Также указано, что вы не должны использовать глобальные переменные.Вы должны объявлять переменную всегда в этой области.

Вы не будете работать при любых проблемах с памятью.Сборщик мусора с этим справится.Но чтобы быть уверенным в том, как сборщик мусора работает в Javascript, есть еще одна ссылка из многих возможных здесь Объяснение сборщика мусора javascript

И я бы порекомендовал использовать let вместо var другую ссылку для получения дополнительной информации: давай объяснение

0 голосов
/ 25 мая 2018

Да, это локальная переменная, т. Е. Не может получить к ней доступ за пределами этой области.

Это нормально, и фактически это один из рекомендуемых методов.

Да, память используется каждый раз, когда она вызывается, но затем она очищается / удаляется сборщик мусора по завершении выполнения функции (при условии отсутствия других утечек).

Еще одна вещь, которую вы можете изменитьот var до let для еще лучшего определения области блока ... хотя в этом очень простом случае это необязательно.

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