JsFiddle не похож на консоль, у него нет окна, в котором он будет выводить возвращаемые значения. Результатом кода является веб-страница, которая отображается в правом нижнем углу.
Вы можете использовать метод alert
для отображения значений:
alert(next());
http://jsfiddle.net/SkSMm/4/
Как видите, вызов next
три раза фактически выведет три значения в массиве. Функция setup
возвращает делегата для анонимной функции, созданной в функции. Поскольку эта анонимная функция использует переменные вне себя, но которые являются локальными для окружающей функции, для функции создается замыкание. Замыкание будет содержать переменные i
и x
. Поскольку замыкание принадлежит делегату, оно выживет от одного вызова функции до следующего и сохранит значения своих переменных.
Вы можете сделать подобное, просто используя глобальные переменные:
var x = ['a','b','c'];
var i = 0;
function next() {
return x[i++];
}
alert(next());
alert(next());
alert(next());
Поскольку переменные объявляются вне функции, они сохраняются между вызовами функции.
Недостаток использования глобальных переменных заключается в том, что один скрипт легко конфликтует с другим, если переменным не присвоены уникальные имена. Если вы используете замыкание, то риск того, что переменные одного скрипта конфликтуют с переменными другого скрипта, отсутствует.