Есть ли польза от установки переданного массива в JS в ноль в конце функции? - PullRequest
0 голосов
/ 14 февраля 2020

Недавно я наткнулся на небольшой код на работе, который поставил меня в тупик, о чем думал оригинальный кодер. Суть кода была в следующем:

function func1(array1) {
   var returnVal = false;

   try
   {
      // Do something. (No effect on array1)
   }

   catch (e)
   {
      CallDebugger(e.description);
   }

   finally 
   {
      // Clean up the memory?
      array1 = null;
   }

   return returnVal;
}

function func2() {
   var arr = [1,2,3]
   var ret = func1(arr)
}

Мой вопрос таков: что именно делает для array1 значение null в конце func1? Изменит ли значение arr на null в func2? Или изменение массива1 на ноль создает новую ссылку на нулевую переменную? Что-то еще?

Имеет ли это потенциальные преимущества в отношении утечки памяти?

1 Ответ

0 голосов
/ 15 февраля 2020

В этом случае кажется совершенно неоправданным делать array1 = null.

Что именно делает для array1 значение null в конце func1? Изменит ли значение arr на null в func2?

По сути, array1 является копией ссылки на arr в func2. Таким образом, это назначение изменит переменную только в области действия func1 и нигде больше, поэтому arr в func2 останется неизменным. И делать это в операторе finally в конце функции бесполезно, поскольку func1 заканчивается сразу после оператора finnaly, а ссылка на array1 будет собирать мусор, и никто никогда не узнает, что для него установлено значение null. (ожидать, если это было в замыкании раньше, но вы говорите, что это не так).

Или изменение массива1 на null создает новую ссылку на переменную null?

Он просто устанавливает значение array1 на ноль, и, как я уже говорил, arr в func2 в этом случае не изменится.

:)

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