Область видимости в JS

Написать функцию makeRandomFn которая принимает массив чисел и возвращает функцию, которая при вызове возвращает любое число c этого, переданного ей, массива

const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])

function makeRandomFn() {
  return function getRandomNumber() {
    getRandomNumber[Math.floor(Math.random() * getRandomNumber.length)];
  }
}

console.log(getRandomNumber()) // 556
console.log(getRandomNumber()) // 100
console.log(getRandomNumber()) // 2

У меня три undef


Ответы (3 шт):

Автор решения: azlov

По порядку, написать функцию makeRandomFn которая принимает массив чисел

function makeRandomFn (array){...}  // функция

возвращает функцию, которая при вызове возвращает любое число c этого, переданного ей, массива

return function getRandomNumber () { // тело функции
  return array[Math.floor(Math.random()*array.length)];
}

Посмотреть работу:

console.log(makeRandomFn([1, 2, 100, 34, 45, 556, 33])())
→ Ссылка
Автор решения: MoloF

const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])

function makeRandomFn(array) {
  return () => array[Math.floor(Math.random() * array.length)]
}

console.log(getRandomNumber())
console.log(getRandomNumber())
console.log(getRandomNumber())

→ Ссылка
Автор решения: Aziz Umarov

Или по интереснее написать решение вашей задачи.

Задача создать замыкание getRandomNumber над массивом чисел которая будет возвращать случайный элемент массива при каждом вызове.

В качестве округления случайного вещественного числа использовать побитовые операции.

const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])

function makeRandomFn(array) {
  return () => array[(Math.random() * array.length) | 0]
}

console.log(getRandomNumber())
console.log(getRandomNumber())
console.log(getRandomNumber())

Ошибка была в возрате замыкания

return function getRandomNumber() {
    return array[Math.floor(Math.random() * getRandomNumber.length)];
  }

И в объявление параметра в функции

function makeRandomFn(array)
→ Ссылка