Область видимости в 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 шт):
По порядку, написать функцию 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])())
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())
Или по интереснее написать решение вашей задачи.
Задача создать замыкание 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)