В данном случае вам нужен не return. Присмотритесь внимательно, ваша функция запускает асинхронный ajax запрос, который выполняется какое-то время. А вы пытаетесь прочитать тот return что зашит в функцию по умолчанию (а он вернет undefined).
Чтобы решить вашу проблему вам нужен коллбэк, который будет вызван после загрузки данных, например так:
function getData(band, genre, callback) {
var result = [];
$.getJSON("data.json", function(data) {
if (!band && !genre) {
result = data
}
if (band !== 'undefined' && !genre) {
for (var i = 0; i < data.length; i++) {
if (data[i].band == band) {
result.push(data[i]);
}
}
}
callback(result); // вот тут мы передаем загруженное значение
});
return undefined; // а вот тут на самом деле расположен тот return, который функция вызовет синхронно
}
function readResult (result) {
console.log(result);
}
getData('Muse', null, readResult)