Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.09.2010, 13:24
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

использование замыкания
Такой вот вопрос

var a;

function getA()
{
  if (typeof(a) == 'undefined')
  {
    a = 1 + 1;
  }

  return a;
}

var b = getA();
var c = getA();


Можно ли в сделать то же самое но не объявляя переменную 'а' в глобальной области? Ну и чтоб а вычислялось 1 раз.

Последний раз редактировалось jetli13, 03.09.2010 в 13:39.
Ответить с цитированием
  #2 (permalink)  
Старый 03.09.2010, 13:48
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Что вы хотите этим сделать?
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 03.09.2010, 14:14
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Можно. Вариантов несколько. Только приведенный Вами пример говорит о бесполезности этого. На самом деле это может быть весьма полезным для создания единственного экземпляра объекта - фабрика объектов.

Последний раз редактировалось with-love-from-siberia, 03.09.2010 в 14:28.
Ответить с цитированием
  #4 (permalink)  
Старый 03.09.2010, 14:50
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Учи основы!!! На сайте куча интересного, полезного, написанного доступным языком материала!
function getA(){
  var a = 1+1;
  return a;
}

var b = getA(), c = getA();
Ответить с цитированием
  #5 (permalink)  
Старый 03.09.2010, 14:56
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Skipp,with-love-from-siberia,
я хочу вычислять значение один раз.
которое буду использовать
with-love-from-siberia,
Цитата:
Можно. Вариантов несколько.
можно пример?
Ответить с цитированием
  #6 (permalink)  
Старый 03.09.2010, 15:23
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Sweet,
Спасибо за В'аш совет.
Только вот код написанный после В'ашего совета проблему не решает. Я ведь правильно понял, В'ы предложили решение?
Ответить с цитированием
  #7 (permalink)  
Старый 03.09.2010, 15:24
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

var getA = (function() {
var a;
return function getA()
{
  if (typeof(a) == 'undefined')
  {
    a = 1 + 1;
  }
 
  return a;
};
})();

var b = getA();
var c = getA();
Ответить с цитированием
  #8 (permalink)  
Старый 03.09.2010, 15:33
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Riim,
Спасибо! То что нужно!
Ответить с цитированием
  #9 (permalink)  
Старый 03.09.2010, 17:15
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от Sweet
Извращенец...
: )

Вот еще:
function getA()
{
    if ( typeof arguments.callee.a == 'undefined') {
        arguments.callee.a = 1 + 1;
    }
    return arguments.callee.a;
};

alert(getA());
alert(getA());
Ответить с цитированием
  #10 (permalink)  
Старый 03.09.2010, 17:26
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от with-love-from-siberia
Вот еще
Ну нет, кстати.. Я так понял человеку нужно, чтобы к переменной не было доступа. Я только не понял, почему мой вариант "не решил его проблему"
UPD: Есть еще такой вариант:
function getA(){
  return 1+1;
};

Последний раз редактировалось Sweet, 03.09.2010 в 17:29.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование функции larpug Общие вопросы Javascript 2 30.03.2010 22:30
Почему замыкания не работают? alex0071 Общие вопросы Javascript 2 18.08.2009 10:16
Использование dll в javascript. alexKniaz Общие вопросы Javascript 5 28.10.2008 18:56
Ошибка вызова замыкания Андрей Параничев Общие вопросы Javascript 8 01.10.2008 21:16
Использование метода setTimeout News Общие вопросы Javascript 3 18.09.2008 20:37