setInterval и глобальные переменные
При попытке обращения к внешней переменной (даже для проверки), выражение в setInterval прекращает работу.
Например var my_counter = 0; setInterval( " if(my_counter) {my_counter++}; ", 5000 ); или setInterval( function(){ alert(my_counter); }, 5000 ); Даже при проверке на null выражение прерывается. Не всегда удобно отказываться от переменной. Вопрос: можно ли как-то работать с глобальными переменными из setInterval и setTimer ? |
var my_counter = 0; setInterval( function(){ my_counter++;alert(my_counter); }, 5000 ); |
if (el) означает
http://ir2.ru/javascript-if.aspx Цитата:
В официальной документации возможно такой вывод делается отсюда http://es5.javascript.ru/x12.html#x12.5 и следовательно отсюда http://es5.javascript.ru/x9.html#x9.2, хотя может быть где-то и явно это указано. Поэтому код в первом setInterval никогда не изменит показание счётчика, хотя сам setInterval будет всегда выполнятся. А второй пример рабочий: через 5с будет выводиться 0 через alert. |
Цитата:
1) равенства написаны нестрогие, а не строгие; 2) забыли о NaN; 3) el может быть свойством доступа и его геттер может творить, что хочет. if (el)на самом деле эквивалентно if (function (v) { return v!==void 0&&v!==null&&v!==false&&v!==0&&v==v&&v!==""; }(el)) |
oneguy, процитировал, откуда взял, интересует место в официальном источнике, где это указано
|
Цитата:
|
чет я не понял сути проблемы, все работает
var counter = 0; setInterval( function(){counter++; alert(counter); }, 2000 ); |
Цитата:
|
Мой пример с function я сам придумал, он нигде не указан. Первая причина в моём замечании по поводу примера с нестрогими сравнениями является серьёзной ошибкой, примеры:
1) "0" приводится к true, а "0"!=0 возвращает false; 2) new String() приводится к true, а new String()!="" возвращает false; Поскольку, если заменить все != на !==, пример будет больше похож на правду, я решил, что автор имел ввиду строгие сравнения. Если надо, могу ссылку на описание алгоритмов сравнения в спецификации. |
Понятно, данное соотношение получено экспериментальным путём
|
Часовой пояс GMT +3, время: 14:25. |