20

Почему выводит undefined?

function rush (filename){
    (function(){
        var res = filename.split(".");
        var b = res[res.lenght - 1];
        return b;
    })();
}
alert(rush("work.tt")); 

Заранее благодарен!

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507

2 Answers2

29

Почему выводит undefined?

Потому что функция rush - ничего не возвращает.

Если убрать все лишнее функцию можно записать так:

function rush (filename){
    (function(){...})();
}

Отсюда хорошо видно отсутствие return. Поэтому результат этой функции всегда - undefined.

Решение "в лоб" - добавление return

function rush(filename) {
  return (function() {
    var res = filename.split(".");
    var b = res[res.lenght - 1];
    return b;
  })();
}
console.log(rush("work.tt"));

При добавлении можно заметить, что все равно не работает. Так как допущена опечатка

lenght -> length

function rush(filename) {
  return (function() {
    var res = filename.split(".");
    var b = res[res.length - 1];
    return b;
  })();
}
console.log(rush("work.tt"));

Теперь видно, что самовызывающаяся функция не нужна

function rush(filename) {
  var res = filename.split(".");
  var b = res[res.length - 1];
  return b;
}
console.log(rush("work.tt"));

Также, для получения последнего элемента массива можно использовать функцию pop

function rush(filename) {
  return filename.split(".").pop();
}
console.log(rush("work.tt"));
Grundy
  • 81,538
1
function rush (filename){
    var res = filename.split(".");
    return res[res.length - 1];
}
alert(rush("work.tt"));
Grundy
  • 81,538
C.Raf.T
  • 4,034