Гарантируется ли однократное создание экземпляра экспортируемых функций? - PullRequest
1 голос
/ 18 июня 2020

Гарантируется ли однократное создание экземпляра экспортируемых функций? Например, браузер будет кэшировать их, и каждый объект или функция, вызывающая импортированную функцию, будет вызывать один и тот же ее экземпляр?

Пример:

export function generateIdIncrementer(string) {
  let num = 0;
  return () =>{
    return string+(num += 1);
  };
}

export const nextLayerId = generateIdIncrementer('layer-');

Пример использования: file1 и file2 оба импортируют nextLayerId, и оба файла вызывают его один раз. Ожидаемый результат: file1 получит layer-1, тогда как file2 получит layer-2.

Все ли современные браузеры гарантируют, что nextLayerId будет существовать как единственный экземпляр? Есть ли какой-нибудь сценарий ios, в котором этот код потенциально может нарушить предполагаемое поведение?

1 Ответ

0 голосов
/ 18 июня 2020

Да, это так.

Насколько я знаю, импортированные nextLayerId - это та же функция, которая имеет такую ​​же ссылку num. Вот почему file1 получает "layer-1", а file2 - "layer-2".

Однако, если есть

export const otherLayerId = generateIdIncrementer('layer-');

Тогда num, на который ссылается otherLayerId отличается от nextLayerId. И если вы импортируете otherLayerId из file1 и file2 и запустите его, вы получите еще layer-1 и layer-2 вместо layer-3 и layer-4.

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