Почему я не могу получить доступ к глобальной переменной в этом коде JavaScript?

В приведенном ниже коде я не могу получить доступ к "цветам" внутри функции, но могу получить доступ к "numColors". Кажется, что функция getColors() правильно устанавливает массив, но функция init() не может получить к нему доступ, как видно из результатов оператора alert.

Страницу можно вызвать с помощью строки параметра, такой как "? 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 ответа

getColors модифицирует colors когда он запускается, а затем перезаписать colors с возвращаемым значением getColors() который (так как ему не хватает return заявление) undefined,

Удалить назначение:

function init() {   
    getColors()

Или поменять getColors поэтому он использует локальную переменную, а затем возвращает ее.

Ваша функция getColors() ничего не возвращает, но вы присваиваете ей значение, когда говорите:

colors = getColors();

Я думаю, что это будет работать, если вы просто позвонили:

getColors();

Не должен ваш init() функция будет

function init() {   
    getColors();

    alert(numColors);
    alert(colors);
 }

Вы устанавливаете colors к возвращаемому значению getColors функция. Тем не менее, вы не возвращаете значение так colors будет установлен в undefined,

Другие вопросы по тегам