Элементарный JS. Нужна помощь

287
09 января 2017, 23:14

Есть кусок кода

var someWords = ["clear", "business", "entertainment"];
function pickWord(someWords) {
    return someWords[Math.floor(Math.random() * someWords.length)];
}

Интерпретатор выдает

cannot read property length of undefined

Но как же ундефайнд если я даже имя аргумента переименовал по уже объявленной переменной??

Answer 1

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

Чтобы не путаться с этим, можно переименовать параметр и получить следующее

var someWords = ["clear", "business", "entertainment"];
function pickWord(words) {
    return words[Math.floor(Math.random() * words.length)];
}

Таким образом, значение параметра someWords определяется тем, с каким параметром была вызвана функция pickWord.

Если функция была вызвана без параметров: pickWord() то значение всех объявленных параметров функции будет undefined.

Для решения необходимо либо передавать глобальную переменную в функцию

var someWords = ["clear", "business", "entertainment"];
function pickWord(words) {
    return words[Math.floor(Math.random() * words.length)];
}
pickWord(someWords);

Либо убрать параметр

var someWords = ["clear", "business", "entertainment"];
function pickWord() {
    return someWords[Math.floor(Math.random() * someWords.length)];
}
pickWord();

В данном случае будет использована глобальная переменная.

Answer 2

Не договариваете Вы чего-то. Все работает

var someWords = ["clear", "business", "entertainment"]; 
 
function pickWord(someWords) { 
  return someWords[Math.floor(Math.random() * someWords.length)]; 
} 
 
var word = pickWord(someWords); 
console.log(word);

READ ALSO
Почему появляется ошибка undefined?

Почему появляется ошибка undefined?

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

369
Какой язык лучше и проще использовать для написания компьютерных программ? [требует правки]

Какой язык лучше и проще использовать для написания компьютерных программ? [требует правки]

И ещёНасколько сложно учить JavaScript: легко, средне или вообще сложно?

285
Как из html объекта получить объект jQuery?

Как из html объекта получить объект jQuery?

К примеру, есть у меня некоторый селектор:

305
Не работает fadeIn

Не работает fadeIn

Я подумал возможно этот метод убрали в новой версии jQuery 31

302