Глобальная переменная JavaScript (изменение значения) - PullRequest
1 голос
/ 28 февраля 2010

Можно ли изменить значение глобальной переменной в JavaScript?

Если это так, возможно ли сделать это в функции, вызываемой прослушивателем событий, например "onreadyStateChange"?

Это работает для нормальных функций. но не меняется, когда я вызываю такую ​​функцию:

<script.......>
    var dom1 = 3;

    function work()
    {
        ...
        http.onreadyStateChange=handleHttpResponse;
        ...
    }

    function handleHttpResponse()
    {
        var xd;
        if (http.readyState == 4)
        {
            if (http.status == 200)
            {
                if (http.responseText == "granted")
                {
                    dom1 = 1;
                }
                else
                {
                    dom1 = 2;
                }
            }
            else
            {
                alert("Error");
            }
        }
    }
</script>

Ответы [ 3 ]

7 голосов
/ 28 февраля 2010

Вы можете изменить значение любой переменной в JS, локальной или глобальной. В функции убедитесь, что вы не объявляете локальную переменную с тем же именем, и у вас есть доступ к глобальной переменной. Даже если вы объявите локальное, вы можете получить доступ к глобальному как свойство window. Вы также можете изменить большинство свойств; в JS или DOM очень мало неизменных типов данных.

Если переменная не установлена ​​так, как вы ожидаете, вы можете использовать Firefox и firebug до отладить код и наблюдать, что происходит.

4 голосов
/ 03 ноября 2010

Пожалуйста, используйте окно ['dom1'] = xxx; вместо var dom1 = xxx;

2 голосов
/ 03 ноября 2010

Пожалуйста, попробуйте:

<script type="text\javascript"> 
    var dom1 = 3; 

    function work() 
    { 
        ... 
        http.onreadyStateChange=handleHttpResponse; 
        ... 
    } 

    function handleHttpResponse() 
    { 
        var xd; 
        if (http.readyState == 4) 
        { 
            if (http.status == 200) 
            { 
                if (http.responseText == "granted") 
                { 
                    *window['dom1']* = 1; 
                } 
                else 
                { 
                    *window['dom1']* = 2; 
                } 
            } 
            else 
            { 
                alert("Error"); 
            } 
        } 
    } 
</script>

Вы обнаружите, что глобальное значение "dom1" окончательно изменено!

...