Как понять код, что почитать чтоб понять явление?
На первый взгляд просто создаём объект. Почему мы видим бесконечный вывод для:
myVarible = {
myFunc: setInterval(function(){
console.log('Why I am running');
}, 100),
};
Почему выполняется myFunc если я его даже не вызывал? Есть догадки, но интересно грамотное объяснение.
Ответы (2 шт):
setInterval возвращает число, потому в самом объекте myVariable у ключа myFunc значение будет число - результат setInterval. Но setInterval уже запушен, потому сообщения будут выводиться с указанным интервалом:
myVarible = {
myFunc: setInterval(function() {
console.log('Why I am running');
}, 2000),
};
console.log('myVarible.myFunc =', myVarible.myFunc);
Почему выполняется 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);