Локальная статическая переменная JavaScript, как в C/C++

Ниже приведен код, демонстрирующий статическую локальную переменную в C/C++. Счетчик будет добавляться каждый раз, когда вызывается btnTestOnclick -- счетчик может накапливаться.

void btnTestOnclick()
{
    static int counter = 0;
    counter++;
}

Но в приведенном ниже коде JS

function btnTestOnclick() {

        class temp{
        static counter=0;
        };
        console.log(temp.counter);
        temp.counter+=1;
}

Этот temp.counter не может накапливаться, каждый раз, когда он равен 0. Я знаю, что перемещение временного класса из функции сработает, но логически предполагается, что этот класс является локальным, поскольку его будет использовать только btnTestOnclick.

Что вы об этом думаете?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
3
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно замыкание, в котором создается постоянная переменная, видимая только для btnTestOnclick. Используйте немедленно вызываемое функциональное выражение.

const btnTestOnclick = (() => {
  let counter = 0;
  return () => {
    counter++;
    // do other stuff with counter?
  };
})();

Тем не менее, лично я считаю, что IIFE в настоящее время немного устарели. Если раздел кода, в котором вы это пишете, таков, что вы опасаетесь, что добавление еще одной переменной в его область видимости (counter) сделает все более запутанным, чем было бы идеально, вероятно, пришло время для извлеките часть этого кода в автономный модуль.

let counter = 0;
export const btnTestOnclick = () => {
  counter++;
  // do other stuff with counter?
};

где вышеуказанный файл не содержит ничего другого (и, таким образом, counter явно относится только к экспортируемому btnTestOnclick)

Другие вопросы по теме