0

在下面的代码中,我无法从函数中访问“颜色”,但可以访问“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>
4

3 回答 3

3

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

删除分配:

function init() {   
    getColors()

或更改getColors,使其使用局部变量,然后返回它。

于 2012-06-29T16:06:28.660 回答
2

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

colors = getColors();

我认为如果您只是打电话,这会起作用:

getColors();
于 2012-06-29T16:09:39.617 回答
1

你的init()功能不应该是

function init() {   
    getColors();

    alert(numColors);
    alert(colors);
 }

您正在设置函数colors的返回值getColors。但是,您不返回值,因此colors将设置为undefined.

于 2012-06-29T16:08:02.417 回答