#javascript
#javascript
Вопрос:
Я запутался в этой ошибке. Я пытаюсь написать функцию и записать массив в этой функции. во внешнем файле js. Это будет случайная функция загрузки изображения, но я продолжаю получать ошибку с массивом и не могу понять, почему.
function randImg(){
var imgs = new Array();
img[0]="banner1.png";
img[1]="banner2.png";
img[2]="banner3.png";
var maxium = img.length;
}
Я получаю сообщение об ошибке в строке var imgs. есть идеи?
Вот мой новый код, вызывающий переменную «img», сбивал меня с толку, он загружается нормально, но он выводит только текст в переменной, а не сам файл !? итак, при запуске он говорит «banner1.png» или «banner3.png»? есть мысли
function randImg(){
var banner = new Array();
banner[0] = "banner1.png";
banner[1] = "banner2.png";
banner[2] = "banner3.png";
var maxImg = banner.length;
var randNum = Math.floor(Math.random()*maxImg);
return banner[randNum];
}
Комментарии:
1. Я
var img
нигде там не вижу.2. Я должен отметить, что я получаю эту ошибку только во внешнем файле js, но если использовать ее внутри, у меня нет ошибки
Ответ №1:
Лучший способ определить массив с его элементами:
var img = [
"banner1.png",
"banner2.png",
"banner3.png",
"banner4.png"
]
И это функция, которая вам может понадобиться:
function randImg(){
var img = [
"banner1.png",
"banner2.png",
"banner3.png",
"banner4.png"
]
var maxImg = img.length;
var randNum = Math.floor(Math.random()*maxImg)
return img[randNum]
}
Ответ №2:
Имена ваших переменных должны быть согласованными. Вы создали новый массив imgs (локальная переменная), но добавили в img (по умолчанию используется глобальная переменная, поскольку вы не объявили ее локальной переменной).
Также обратите внимание, что в Javascript нет особого смысла добавлять var
оператор, который не является первой строкой функции. Это из-за подъема. По сути, Javascript возьмет ваш var
и переместит его в первую строку, установив для переменной значение undefine
. Это может повлиять или не повлиять на то, как ваша программа работает в сравнении с тем, как вы думаете, что она должна работать, поэтому лучше всего добавить все ваши var
s в начало ваших функций. Javascript имеет область действия функции, а не область блока.
(также обратите внимание, что maximum
это более значимое имя переменной, чем maxium
)
// This adds to the newly created array:
function randImg(){
var img = new Array(), // Note: img NOT imgs
maximum; // Even if a var is below this line, Javascript hoists it here
img[0] = "banner1.png";
img[1] = "banner2.png";
img[2] = "banner3.png";
maximum = img.length;
}
и вы можете использовать .push()
, если вы просто добавляете в конец массива (как вы делаете)
function randImg(){
var img = new Array(), // Note: img NOT imgs
maximum;
img.push("banner1.png");
img.push("banner2.png");
img.push("banner3.png");
maximum = img.length;
}
или
function randImg(){
var img = new Array(), // Note: img NOT imgs
maximum;
img.push("banner1.png").push("banner2.png").push("banner3.png)";
maximum = img.length;
}
или, что еще лучше, просто используйте []
для инициализации пустого массива или [a,b,c,...]
для инициализации массива с элементами. Кроме того, зачем использовать var
дважды?
function randImg(){
var img = ["banner1.png","banner2.png","banner3.png"], // note comma
maximum = img.length;
}
Наконец, чтобы соответствовать имени функции
var randImg = function() {
var img = ["banner1.png","banner2.png","banner3.png"];
return img[Math.floor(Math.random()*img.length)];
}
Комментарии:
1. Есть ли какая-либо причина, по которой вы присваиваете переменной литерал функции, а не обычное определение функции?
2. @icktoofay — Поскольку я не знаю, где OP хочет использовать функцию, она более гибкая. Объявления функций официально запрещены в нефункциональных блоках (например, if) . Однако все браузеры разрешают их и интерпретируют по-разному.