utrzymanie zmiennej przy życiu w funkcji javascript
Chcę umieścić zmienną w funkcji Ta zmienna zmieni stan w zależności od interakcji użytkownika
function plan_state(current){
if (current != ''){
state = current;
}
else {
return state;
}
}
Kiedy doc ładuje wywołuję plan_state('me');
Kiedy pewne rzeczy się wydarzą, mogę nazwać plan_state ('kochany')
Problem, uruchamiam funkcję i chcę sprawdzić aktualny stan..
alert(plan_state());
Dostaję undefined z powrotem i co najmniej powinno być "ja", jak to ustawiam.
Co robię źle?2 answers
Funkcja nie jest stanowa, ponieważ zmienna stanowa jest zadeklarowana wewnątrz funkcji i dlatego istnieje tylko przez cały czas trwania wywołania funkcji. Łatwym rozwiązaniem byłoby zadeklarowanie zmiennej globalnie, poza funkcją. To jest złe bad bad bad .
Lepszym podejściem jest użycie wzoru modułu . Jest to niezbędny wzorzec, aby dowiedzieć się, jeśli poważnie myślisz o rozwoju javascript. Umożliwia stan za pomocą w przeciwieństwie do innych metod, które nie są w stanie odczytać stanu, nie są w stanie odczytać stanu.]}
var stateModule = (function () {
var state; // Private Variable
var pub = {};// public object - returned at end of module
pub.changeState = function (newstate) {
state = newstate;
};
pub.getState = function() {
return state;
}
return pub; // expose externally
}());
Więc stateModule.changeState("newstate");
ustawia stan
I var theState = stateModule.getState();
otrzymuje stan
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:44
Uważam, że zakres zmiennej jest zbyt "niski"; definiując zmienną w funkcji, jako parametr lub jawnie jako var
, jest ona dostępna tylko w funkcji. Aby osiągnąć to, czego szukasz, możesz albo zaimplementować zmienną poza zakresem funkcji, na bardziej globalnym evelu(naprawdę nie zaleca się).
state
niezależnie od current
? I myślę, że możesz być po coś takiego:
var state;
function plan_state(current)
{
if (current != '' && current != state)
{
state = current;
}
return state;
}
Alternatywna struktura obiektu:
function StateManager(state)
{
this.state = state;
this.getState = function(current)
{
if (current != '' && current != this.state)
{
this.state = current;
}
return this.state;
}
}
// usage
var myStateManager = new StateManager("initial state here");
var theState = myStateManager.getState("some other state");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 16:41:09