Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ (https://javascript.ru/forum/misc/1298-staticheskie-peremennye.html)

giGnet 11.06.2008 22:17

СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ
 
Здравствуйте! Подскажите пожалуйста, как в js использовать статические переменные или их подобие(мож свойства какого класса?)! В нете нигде не нашел инфы по этому поводу. Желательно с примерами =)

tenshi 11.06.2008 23:06

как и любые другие переменные...

Гость 12.06.2008 09:21

Я же просил с примером. В PHP, к примеру, определение такое - static $a = 0; А в JS ?

Gvozd 12.06.2008 10:34

qwe=function()
{
alert(++arguments.callee.i)
}
qwe.i=0
qwe()
qwe()

Kolyaj 12.06.2008 21:50

Цитата:

Сообщение от Гость
А в JS ?

А в JS нет статических переменных.

Gvozd 12.06.2008 22:16

Цитата:

Сообщение от Kolyaj
А в JS нет статических переменных.

в JS много чего нет, и много чего есть. и как правило нехватающие элементы можно имитировать существующими инструментами. выше я разместил имитацию, которая родилась на скорую руку(не претендую на лавры. не я первый такой умный). при желании можно и более красивое что-нить придумать

Гость 16.06.2008 20:28

Спасибо! =) Разобрался

Gvozd 17.06.2008 02:56

та пожалуйст, вобщем. сомому интересно было покопатся)

Infocatcher 25.06.2008 17:26

Еще одно извращение на тему:

Function.prototype.i = 0;
Function.prototype._ = function() {
    this.i++;
    this.apply(this, arguments);
};
function f(t, x) {
    alert(t + x + "\nItaration: " + arguments.callee.i);
}
f._(2, 3);
f._("Abc", "Def");

Gvozd 25.06.2008 18:39

честно говря, не понял пользы от последнего кода. те же яйца только в смятку.
засоряем Function.prototype , причем абсолютно бессмысленно.
способ обращения к переменной из функции не изменился.
выхов функции удлинился.
кароче, низачот

Kolyaj 25.06.2008 21:44

function myfunc() {
  var i = 0;
  myfunc = function() {
    return i++;
  }
  return myfunc();
}

Gvozd 25.06.2008 21:58

Kolyaj,
Самый лучший код в этой теме.
жалко в этом форуме нет рейтинга, я бы тебе плюс поставил)))))
красиво и со вкусом

Sh4dow 10.07.2009 15:26

Народ, а this? Объявление статической переменной :

if (typeof(this.i) == 'undefined') {this.i = 0;}


Только что проверил, работает, вот для теста:

function chet() {
  if (typeof(this.i) == 'undefined') {this.i = -2;}
  this.i += 2;
  return this.i;
  }

Kolyaj 10.07.2009 15:31

Sh4dow, this в этом случае будет равен window, т.е. i -- это фактически глобальная переменная.
console.log(chet());
console.log(chet());
i++;
console.log(chet());
console.log(chet());

Sh4dow 10.07.2009 16:45

function chet() {
  if (typeof(chet.i) == 'undefined') {chet.i = -2}
  chet.i += 2;
  return chet.i;
  }


Пардон, вот что-то типа. Да, я пас, то же самое, собственно, что на 1 стр, получилось =/

nomen 20.07.2011 15:21

Скажите пожалуйста, а чем плох такой способ.
Есть допустим отдельный файлик для js и вот взять там и создать переменную вне тела функции.
Чем такая переменная не статическая?

monolithed 20.07.2011 15:25

Цитата:

Сообщение от nomen
Есть допустим отдельный файлик для js и вот взять там и создать переменную вне тела функции.
Чем такая переменная не статическая?

статическая переменная на то и статическая, что ее значение должно сохраняться между вызовами функции

function foo() {
    if(!this.i) {
       this.i = 0;
    }
    return this.i++;
}

alert([foo(), foo(), foo()]);

Sergic_l 25.12.2011 12:40

Здравствуйте!
Помогите пожалуйста. Хочу создать статическую переменную, которая считала выходы на сайт.
Записал скрипт такой
//function f() { // if (f.count == undefined) {f.count=0;} // инициализовать при первом вызове
// f.count++; // alert("Вызов номер " + f.count); //}
Однако при повторном вызове сайта f.count == undefined

9xakep 25.12.2011 13:06

И этой теме уже 4 год пойдет...Хотя какой 4ый? 5ый уже...!
Sergic_l, потому что вы зашли на сайт у вас там "посчиталось" (при этом информация и "посчитании" нигде не сохранилась) используйте куки...Или вам нужен счетчик заходов на сайт?

tenshi 26.12.2011 12:29

поставь яндекс метрику и будут тебе всякие счётчики х))


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