Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2013, 10:37
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Как передать функцию с параметрами в качестве аргумента другой функции
Есть следующая логика:
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})


Вообщем хочется некой эстетики в коде
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2013, 12:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от DragorWW
мне нужно что бы функция каждый раз вызывалась, а не только первый раз при указание её.

Опишите нужный Вам процесс работы функции - Ваши хотелки неясны!
Что нужно то в итоге ?

1.Запускаем ...
2. ....
....
N-ное.....
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2013, 12:10
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Сообщение от Deff Посмотреть сообщение

Опишите нужный Вам процесс работы функции - Ваши хотелки неясны!
Что нужно то в итоге ?
нужно что бы вот это:
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()
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2013, 12:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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);

Последний раз редактировалось Deff, 08.01.2013 в 12:36.
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2013, 12:46
Интересующийся
Отправить личное сообщение для DragorWW Посмотреть профиль Найти все сообщения от DragorWW
 
Регистрация: 27.06.2011
Сообщений: 15

Сообщение от Deff Посмотреть сообщение
someString = someString + eval(num)
Спасибо, жаль что нет конструкции для передачи ссылку на переменную через переменную в самом языке на вроде & перед переменной как в php.
Без eval я так понимаю тут ни как ?
Ответить с цитированием
  #6 (permalink)  
Старый 08.01.2013, 12:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

DragorWW,
Да есть прототипы
Сообщение от DragorWW
Без eval я так понимаю тут ни как ?
Эт первое, что пришло на ум
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2013, 13:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Deff
Эт первое, что пришло на ум
someString = someString + (new Function('', 'return ' + num))();

не?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 08.01.2013, 13:18
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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, не глянешь темку ? = > кроссдоменный обмен через анонимайзер + фрейм
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2013, 13:28
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Deff
правда чуток напрягает двойные кавычки для строковых переменных;
ну дык избавится можно от них:

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);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 08.01.2013, 13:43
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от devote
ну дык избавится можно от них:
Симпатично!
Дзен-трансгуманист,
Про по условию тож думал изначально, но как то неизящно по длине и в плане понимания изменений (если комментов не),

Да и условия - жесткие, к примеру захотел внедрить объект или массив
(массив функций
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запустить функцию после другой функции Rentony jQuery 7 07.02.2012 18:01
Указание ссылки на функцию с параметрами user_i Общие вопросы Javascript 5 06.02.2012 12:08
Как передать false через функцию? Tend Общие вопросы Javascript 7 16.03.2009 16:55
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11