Когда функции требуется переменная, значение которой должно сохраняться между ее вызовами, часто оказывается удобным использовать свойство объекта Function, позволяющее не занимать пространство имен определениями глобаль_ ных переменных. Предположим, что надо написать функцию, возвращающую уникальный идентификатор при каждом своем вызове. Функция никогда не должна возвращать одно и то же значение дважды. Чтобы обеспечить это, функ_ ция запоминает последнее возвращенное значение, и эта информация сохраня_ ется между ее вызовами. Хотя указанная информация может храниться в гло_ бальной переменной, в этом нет никакой необходимости, и лучше сохранять ее в свойстве объекта Function, т. к. эта информация используется только самой функцией. Вот пример функции, которая возвращает уникальное целое значе_ ние при каждом вызове:
// Создаем и инициализируем "статическую" переменную.
// Объявления функций обрабатываются до исполнения кода,
// поэтому мы действительно можем выполнить это присваивание
// до объявления функции
uniqueInteger.counter = 0;
// Сама функция. Она возвращает разные значения при каждом
// вызове и использует собственное "статическое" свойство
// для отслеживания последнего возвращенного значения. function uniqueInteger() {
// Наращиваем и возвращаем значение "статической" переменной return uniqueInteger.counter++;
}