Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   использование замыкания (https://javascript.ru/forum/misc/11614-ispolzovanie-zamykaniya.html)

jetli13 03.09.2010 13:24

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

var a;

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

  return a;
}

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


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

Skipp 03.09.2010 13:48

Что вы хотите этим сделать?

with-love-from-siberia 03.09.2010 14:14

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

Sweet 03.09.2010 14:50

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

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

jetli13 03.09.2010 14:56

Skipp,with-love-from-siberia,
я хочу вычислять значение один раз.
которое буду использовать
with-love-from-siberia,
Цитата:

Можно. Вариантов несколько.
можно пример?

jetli13 03.09.2010 15:23

Sweet,
Спасибо за В'аш совет.
Только вот код написанный после В'ашего совета проблему не решает. Я ведь правильно понял, В'ы предложили решение?

Riim 03.09.2010 15:24

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

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

jetli13 03.09.2010 15:33

Riim,
Спасибо! То что нужно!

with-love-from-siberia 03.09.2010 17:15

Цитата:

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

: )

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

alert(getA());
alert(getA());

Sweet 03.09.2010 17:26

Цитата:

Сообщение от with-love-from-siberia
Вот еще

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


Часовой пояс GMT +3, время: 12:53.