为什么我不能在这个JavaScript代码中访问全局变量?

时间:2012-06-29 16:04:21

标签: javascript global-variables

在下面的代码中,我无法从函数中访问“colors”,但我可以访问“numColors”。 getColors()函数似乎正确设置了数组,但init()函数无法访问它,如警告语句结果所示。

可以使用参数字符串调用页面,例如“?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>

3 个答案:

答案 0 :(得分:3)

getColors在运行时修改colors,然后用colors的返回值覆盖getColors()(因为它缺少return语句)是undefined

删除作业:

function init() {   
    getColors()

或者更改getColors以便它使用局部变量然后返回它。

答案 1 :(得分:2)

你的getColors()函数没有返回任何内容,但当你说:

时,你正在给它赋值。
colors = getColors();

我认为只要你打电话就可以了:

getColors();

答案 2 :(得分:1)

init()功能不应该是

function init() {   
    getColors();

    alert(numColors);
    alert(colors);
 }

您正在将colors设置为getColors功能的返回值。但是,您不会返回值,因此colors将设置为undefined