romasovest
@romasovest
~

Как в аргументе функции сослаться на динамическую переменную?

// переменная variable рандомится раз в секунду
var variable = 0;
var int = setInterval(function() {
    variable = Math.random();
}, 1000);

// функция запускает интервал с проверкой argument > 0.5
function checker(argument) {
    var int = setInterval(function() {
        if(eval(argument) > 0.5) {
            console.log('переменная "variable" больше 0.5');
            clearInterval(int);
        };
    }, 1000);
}

// запускаем проверку variable > 0.5;
checker('variable');


Как сделать это без eval()?

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

Вот если передаю имя переменной строкой, а в функции использую eval() (как в примере выше), то все работает отлично, но не хочется использовать eval() и хочется чтобы аргумент функции был не строкой, а например query объектом. Да и вообще каким то экзотическим местом своего юного организма ощущаю, что у меня очень кривое решение.

Подскажите пожалуйста, как исправить?
  • Вопрос задан
  • 412 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Мне нужно написать такую функцию, которая будет чекать условие... Например я вызываю функцию вот так checker(a>b); и функция в течении 10 секунд раз в секунду проверяет a>b и если за эти 10 секунд a>b стало true, то ок, если не стало, то не ок.


О, я кажется понял что вы хотите.
// рандомные числа
var a, b, c;
setInterval(function() {
    a = Math.round(100 * Math.random())
    b = Math.round(100 * Math.random())
    c = Math.round(100 * Math.random())
    console.log('randomizer a='+a+', b='+b+', c='+c);
}, 1000);


function runChecker(func) {
    var timer = setInterval(function(){
    	if (func()) {
        clearInterval(timer)
        console.log('bingo!, проверка ' + func.toString() + ' прекращена')
      }
    }, 1000);
}

// запускаем проверки
runChecker(function(){ return a > 80});
runChecker(function(){ return a > b });
runChecker(function(){ return b > c });

https://jsfiddle.net/7md6c7x0/
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
BuriK666
@BuriK666
Компьютерный псих
сделайте объект
var variable = {value: 0}

var variable = {value: 0};
var int = setInterval(function() {
variable.value = Math.random();
}, 1000);

// функция запускает интервал с проверкой argument > 0.5
function checker(argument) {
var int = setInterval(function() {
if(argument.value > 0.5) {
console.log('переменная "variable" больше 0.5');
clearInterval(int);
};
}, 1000);
}
// запускаем проверку variable > 0.5;
checker(variable);
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
А почему просто не передавать саму переменную? Юный организм правильно ощущает:)

// переменная variable рандомится раз в секунду
var variable = 0;
var int = setInterval(function() {
    variable = Math.random();
}, 1000);

// функция запускает интервал с проверкой argument > 0.5
function checker(argument) {
    var int = setInterval(function() {
        if(argument > 0.5) {
            console.log('переменная "variable" больше 0.5');
            clearInterval(int);
        };
    }, 1000);
}
// запускаем проверку variable > 0.5;
checker(variable);


В принципе 95% случаев использования eval обходятся с помощью window[variableName], но тут и этого не нужно:)
Ответ написан
Вам обязательно нужно передавать в функцию переменную? Просто в замыкание вы ее не хотите запихнуть?
// переменная variable рандомится раз в секунду
var variable = 0;
var int = setInterval(function() {
    variable = Math.random();
}, 1000);

// функция запускает интервал с проверкой argument > 0.5
function checker() {
    var int = setInterval(function() {
        if(variable > 0.5) {
            console.log('переменная "variable" больше 0.5');
            clearInterval(int);
        };
    }, 1000);
}

// запускаем проверку variable > 0.5;
checker();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы