2010-02-28 134 views
0

是否可以在JavaScript中更改全局變量的值?全局變量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> 
+0

是的,試試吧。 – Matthew 2010-02-28 04:43:40

+1

在引入全局變量以避免與現有或未來代碼發生衝突時,我總是儘量保持謹慎,您想做什麼? – CMS 2010-02-28 04:50:43

回答

6

您可以更改JS,local或global中任何變量的值。在一個函數中,確保你不要聲明一個具有相同名字的局部變量,並且你可以訪問全局變量。即使您聲明本地,您也可以作爲window的財產訪問全球。您也可以更改大多數屬性; JS或DOM中有很少不可變的數據類型。

如果未按照您的設置設置變量,則可以使用Firefox和firebugdebug代碼並觀察發生了什麼。

2

請嘗試:

<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」 終於要改變了!

4

請使用window ['dom1'] = xxx;而不是var dom1 = xxx;