2012-06-29 86 views
0

在下面的代碼中,我無法訪問函數中的「顏色」,但我可以訪問「numColors」。 getColors()函數似乎正確設置了數組,但init()函數無法訪問它,如alert語句結果所示。爲什麼我無法在此JavaScript代碼中訪問全局變量?

頁面可以使用參數字符串調用,例如「?colors = 0000FF | FF0000」。

<!DOCTYPE html> 
<html lang="en"> 

<head></head> 

<body> 

<script> 

(function() { 

     var colors = []; 
     var numColors; 

     document.addEventListener("DOMContentLoaded", init, false);   

     function init() { 
      colors = getColors() 

      alert(numColors); 
      alert(colors); 
     } 

     function getColors() { 
      var data = getURLParameter('colors'); 
      var list = data.split('|'); 

      for (i = 0; i < list.length; i++) { 
       colors.push(list[i]); 
      } 

      numColors = colors.length; 

      alert(numColors); 
      alert(colors); 
     } 


     // from http://www.netlobo.com/url_query_string_javascript.html 

     function getURLParameter(name) { 
      name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 

      var regexS = "[\\?&]" + name + "=([^&#]*)"; 
      var regex = new RegExp(regexS); 

      var results = regex.exec(window.location.href); 

      if (results == null) { 
       return ""; 
      } else { 
       return results[1];  
      } 
     } 

})(); 

</script>    

</body> 
</html> 
+0

當你警告(顏色)時會發生什麼? –

+0

您的意思是「如警報聲明結果所示」?你在看什麼? – Mathletics

+0

注意:'colors'和'numColors'不是全局變量,而是閉包變量。 – biziclop

回答

3

getColors修改colors當它運行,然後覆蓋colorsgetColors()返回值(因爲它缺乏一個return聲明)是undefined

刪除分配:

function init() { 
    getColors() 

或更改getColors所以它使用了一個局部變量,然後返回。

1

應該不是你的init()功能是

function init() { 
    getColors(); 

    alert(numColors); 
    alert(colors); 
} 

要設置colorsgetColors函數的返回值。但是,您不返回值,因此colors將設置爲undefined

2

你getColors()函數沒有返回任何東西,但你給它分配一個值,當你說:

colors = getColors(); 

,我認爲這會工作,如果你只是叫:

getColors(); 
相關問題