Отличить первый запуск от других в автономной функции? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть проект, где каждая функция полностью независима, как модуль.

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

Тем не менее, у меня есть случай, когда одна из этих функций действует по-разному, если она запускается впервые или уже выполнялась ранее.

На данный момент единственный способ, которым я нашел для достижения этой цели, - это использование внешнего логического значения, чего я хотел бы избежать, например:

var init = true;
function someFunc() {
    if (init) {
        init = false;
        // First run code
    }
    else {
        // Not first run code
    }
}

Есть ли какой-нибудь способ в javascript для достижения того же самого в «автономной» функции , то есть без внешнего логического значения?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Да, вы можете использовать функцию генератора

Генераторы - это функции, которые можно закрыть, а затем снова ввести. Их контекст (привязки переменных) будет сохранен через повторные входы.

Таким образом, вы можете не только дифференцировать первый прогон, но и дифференцировать каждый конкретный прогон. как это:

function* foo() {
  yield 'first'; //first time
  yield 'second'; //second time
  yield 'third'; //third time
}

var str = "";
for (let val of foo()) {
  str = str +" "+val;
}

console.log(str);//first second third
0 голосов
/ 27 июня 2018

Вот что я описал выше в комментарии. Обратите внимание, что, вероятно, есть более эффективные способы сделать это в меньшем количестве строк кода, однако для целей изучения я думаю, что это лучший способ написать это.

var myFunction = (function(){
  let firstTime = true;
  return function trueFunction(){
    if (firstTime){
      console.log('first!');
      firstTime = false;
    } else {
      console.log("first, oh goddamnit!");
    }
  }
})()

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