Почему я не могу получить доступ к глобальной переменной в этом коде 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
,