0

以下のコードでは、関数内から「colors」にアクセスすることはできませんが、「numColors」にはアクセスできます。getColors()関数は配列を適切に設定しているように見えますが、alertステートメントの結果からわかるように、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実行時に変更し、 whichの戻り値でcolors上書きします (ステートメントがないため) is .colorsgetColors()returnundefined

割り当てを削除します。

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 に答える