Как понять код, что почитать чтоб понять явление?

Рейтинг: 0Ответов: 2Опубликовано: 30.04.2023

На первый взгляд просто создаём объект. Почему мы видим бесконечный вывод для:

myVarible = {
    myFunc: setInterval(function(){
        console.log('Why I am running');
    }, 100),
};

Почему выполняется myFunc если я его даже не вызывал? Есть догадки, но интересно грамотное объяснение.

Ответы

▲ 2Принят

Почему выполняется myFunc если я его даже не вызывал?

Почему вы решили, что не вызывали? Вы объявили объект с ключом и значением. Когда происходит парсинг кода браузером, то он читает и раскладывает его по полочкам, чтобы потом это как-то использовать. Вот он читает объект, у которого ключ myFunc, а значение для этого ключа: результат вызова функции setInterval. Он её и вызывает.

Чтобы внутри переменной хранилось объявление функции, нужно (сюрприз!!!) её и объявлять:

myVarible = {
  myFunc: () => {  // или вот так:  function() {
      setInterval(function() {
        console.log('Why I am running');
      }, 500);
  } 
};

console.log('всё нормально, ничего не выводится', myVarible.myFunc);


setTimeout(function() {
  console.log('А вот теперь только мы запускаем функцию');
  myVarible.myFunc();
}, 2000);

▲ 0

setInterval возвращает число, потому в самом объекте myVariable у ключа myFunc значение будет число - результат setInterval. Но setInterval уже запушен, потому сообщения будут выводиться с указанным интервалом:

myVarible = {
  myFunc: setInterval(function() {
    console.log('Why I am running');
  }, 2000),
};

console.log('myVarible.myFunc =', myVarible.myFunc);