При запуске следующего кода в консоли
var ajout1 = function(number) {
number = number || 100;
console.log(number + 1);
}
setTimeout(ajout1, 1000);
setTimeout(ajout1(500), 2000); // evaluates immediately and returns nothing but this is "by design" to show how NOT to write your timeout
setTimeout(function() {
ajout1(1000)
}, 3000);
можно ожидать следующего результата
t+1: 101
t+2: 501
t+3: 1001
Если вы присмотритесь более внимательно, вы увидите, что t2 будет немедленно оценено и поэтому не будет ждать 2 секунды, прежде чем вернуться. (Это «по замыслу». Оно учит (мне), как не писать тайм-аут). Таким образом, ожидаемый результат становится:
t+0: 501
t+1: 101
t+3: 1001
На самом деле я действительно получаю
t+0: 501
t+0: <X
t+1: 101
t+3: 1001
С Х постоянно растущей ценностью.
Я думаю, что X - это таймер, поэтому я переписал свой код как
var t1=setTimeout(ajout1,1000);
var t2=setTimeout(ajout1(500),2000);// no good
var t3=setTimeout(function(){ajout1(1000)},3000);
теперь вывод
t+0: 501
t+0: <undefined
t+1: 101
t+3: 1001
Если я оцениваю t1, t2, t3, их значения равны X + 1, X + 2, X + 3. Так что я думаю, моя ставка X была правильной.
Мой вопрос: почему консоль выводит значение только 1 счетчика, а не три? Почему я получил "неопределенное" значение.
Я тестировал в консоли Chrome и Edge с одинаковыми результатами