Ошибка синтаксиса массива новичок

#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)];
}
  

… и вот рабочий пример randImg()

Комментарии:

1. Есть ли какая-либо причина, по которой вы присваиваете переменной литерал функции, а не обычное определение функции?

2. @icktoofay — Поскольку я не знаю, где OP хочет использовать функцию, она более гибкая. Объявления функций официально запрещены в нефункциональных блоках (например, if) . Однако все браузеры разрешают их и интерпретируют по-разному.

3. javascriptweblog.wordpress.com/2010/07/06/…