Как передать функцию с параметрами в качестве аргумента другой функции
Есть следующая логика:
random = function (max) { var min = 1; return Math.floor(Math.random() * (max - min) + min) } someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + num } console.log(someString) } someFunction(random(6)) Вернёт 'numbers: 66666666666' или 'numbers: 11111111111' и так далее. Но мне нужно что бы функция каждый раз вызывалась, а не только первый раз при указание её. Есть такой вариант, но мне он не очень нравиться: random = function (max) { var min = 1; return Math.floor(Math.random() * (max - min) + min) } someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + num() } console.log(someString) } someFunction(function() {return random(6)}) Вернёт то что нужно 'numbers: 52524414321' Но опять же это не удобно, так как num не всегда должно быть функцией, а может быть числом, и тогда придётся писать так: someFunction(function() {return 6}) Вообщем хочется некой эстетики в коде |
Цитата:
Опишите нужный Вам процесс работы функции - Ваши хотелки неясны! Что нужно то в итоге ? 1.Запускаем ... 2. .... .... N-ное..... |
Цитата:
someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + num } console.log(someString) } someFunction(random(6)) работало так же как и вот это, и возвращало 'numbers: 52524414321', someFunction = function () { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + random(6) } console.log(someString) } someFunction() |
random = function (max) { var min = 1; return Math.floor(Math.random() * (max - min) + min) } someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + eval(num) } alert(someString) } var X; X = 'random(6)'; someFunction(X); X = 6; someFunction(X); X = '\'Z\''; someFunction(X); |
Цитата:
Без eval я так понимаю тут ни как ? |
DragorWW,
Да есть прототипы Цитата:
|
Цитата:
someString = someString + (new Function('', 'return ' + num))(); не? |
devote,+
Работает, правда чуток напрягает двойные кавычки для строковых переменных; random = function (max) { var min = 1; return Math.floor(Math.random() * (max - min) + min) } someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + (new Function('', 'return ' + num))(); } alert(someString) } var X; X = 'random(6)'; someFunction(X); X = 6; someFunction(X); X = '\'Z\''; someFunction(X); Кстать, devote, не глянешь темку ? = > http://javascript.ru/forum/project/3...er-frejjm.html |
Цитата:
random = function (max) { var min = 1; return Math.floor(Math.random() * (max - min) + min) } someFunction = function (num) { var someString = 'numbers: ' for (var a=0;a<=10;a++) { someString = someString + (new Function('x', 'try{return ' + num + '}catch(_e_){return x}'))(num); } alert(someString) } var X; X = 'random(6)'; someFunction(X); X = 6; someFunction(X); X = 'Z'; someFunction(X); |
Цитата:
Дзен-трансгуманист, Про по условию тож думал изначально, но как то неизящно по длине и в плане понимания изменений (если комментов не), Да и условия - жесткие, к примеру захотел внедрить объект или массив (массив функций |
Часовой пояс GMT +3, время: 04:32. |